Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Funzione che copia stringa tramite puntatori

    Salve a tutti,

    ho preso dal Kernighan una versione della 'strcpy' realizzata con i puntatori. Ho scritto il codice per testarla ma non funziona. Nella compilazione non da errori ma poi va in crash appena il programma viene eseguito.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void strcpy(char *s, char *t);
    
    int main(){
        char *s1 = "Salve, mondo!";
        char *s2 = "Hello, world!";
    
    
        strcpy(s1, s2);
    
    
        system("PAUSE");
        return 0;
    }
    
    
    void strcpy2(char *s, char *t){
        while((*s=*t)!='\0'){
            s++;
            t++;
        }
    }
    Sinceramente non ne vengo a capo

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Non ho controllato il codice, ma la tua funzione si chiama strcpy2. In due occasioni ti sei dimenticato il 2.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Quote Originariamente inviata da minomic Visualizza il messaggio
    Non ho controllato il codice, ma la tua funzione si chiama strcpy2. In due occasioni ti sei dimenticato il 2.
    Ho dimenticato di toglierlo, in ogni caso non funziona..

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    --- Messaggio eliminato. Vedere sotto. ---

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Questa versione funziona. Controlla le differenze...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    void strcpy2(char *dst, char *src);
    
    
    int main()
    {
        //char *s1 = "Salve, mondo!";
        char *s2 = "Hello, world!";
        char *s3 = malloc(sizeof(s2) + 1);
    
    
        strcpy2(s3, s2);
    
    
        printf("Stringa copiata: %s\n", s3);
    
    
        return 0;
    }
    
    
    
    
    void strcpy2(char *dst, char *src)
    {
        while(*src != '\0')
        {
            *dst++ = *src++;
        }
        /* aggiungo il terminatore */
        *dst = '\0';
    }

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Ciao, la tua funzione è corretta, scorretto è che char*s1 ="Salve, mondo!"; , non è un array ma una costante stringa, che quindi non puoi
    modificare, basta sostituire con
    chars1[] ="Salve, mondo!"; che potrà essere modificata.

    La soluzione di
    minomic applica proprio questa correzione, ma crea un array dinamico con la malloc, eviterei di usare costanti stringa visto la poca utilità.
    Tecnologia

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Ringrazio tutti e due per l'aiuto. Alla fine ho utilizzato la soluzione di torn24 solo per non cambiare la funzione. Avevo anche letto che char *s1 = "stringa" era una costante ma lì per lì non avevo realizzato che non poteva essere modificata.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.