PDA

Visualizza la versione completa : [C] Funzione che copia stringa tramite puntatori


goatboy
06-09-2014, 17:52
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.



#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 :confused:

minomic
06-09-2014, 20:22
Non ho controllato il codice, ma la tua funzione si chiama strcpy2. In due occasioni ti sei dimenticato il 2.

goatboy
06-09-2014, 22:21
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..

minomic
06-09-2014, 22:43
--- Messaggio eliminato. Vedere sotto. ---

minomic
06-09-2014, 22:43
Questa versione funziona. Controlla le differenze...



#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';
}

torn24
07-09-2014, 08:20
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 char s1[] = "Salve, mondo!"; che potrÓ essere modificata.

La soluzione di minomic (http://forum.html.it/forum/member.php?userid=189269) applica proprio questa correzione, ma crea un array dinamico con la malloc, eviterei di usare costanti stringa visto la poca utilitÓ.

goatboy
07-09-2014, 09:00
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.

Loading