PDA

Visualizza la versione completa : [C] Puntatori a char


Brolli
11-01-2005, 18:50
char *a = "a2a\n";
char *b = "b2b\n";
printf("%s", strcat(a, b));


perch mi da "Segmentation fault"? :dh: :confused: :cry:

netarrow
11-01-2005, 19:00
se non ricordo male, strcat non ritorna un nuovo char*, ma modifica uno dei puntatori passati, cio tu dovresti fare cos:



char* a = "sd";
char* b ="sg";
strcat(a, b);
printf("%s", a);


credo sia cos, adesso non riesco a controllare

:ciauz:

pprllo
11-01-2005, 19:00
strcat non restituisce una stringa. strcat concatena semplicemente la seconda stringa alla prima. Devi fare.


char *a = "a2a\n";
char *b = "b2b\n";
strcat(a, b)
printf("%s", a);

pprllo
11-01-2005, 19:01
Appunto :D

LeleFT
11-01-2005, 19:02
Credo che sia dovuto al fatto che a e b sono delle costanti: essi sono dei puntatori a 2 locazioni di memoria che sono gi allocate e dimensionate per contenere i due valori. dato che strcat() concatena la seconda sringa alla prima, fornendo il risultato nella prima (se non ricordo male), questa operazione produce il segmentation fault, in quanto tu tenti di scrivere della memoria (quella subito dopo l'ultimo carattere della stringa a) che non allocata per te.


Ciao. :ciauz:

pprllo
11-01-2005, 19:06
Io credo che nello specifico il "Segmentation Fault" sia dato dal semplice fatto che lui si aspetta una stringa null-terminated. Ricevendo invece un intero, non trova il carattere null e va avanti fino al segmentation fault.

LeleFT
11-01-2005, 19:10
Il problema che, anche con le soluzioni proposte sopra, d l'errore (avevo gi provato, proprio perch so che la funzione strcat() non ritorna una stringa).

Questo programma, infatti funziona perfettamente:


char a[20] = "ciao";
char b[5] = "b2b\n";
strcat(a, b);
printf("%s", a);

e pure questo, anche se non stampa certo il risultato voluto:


char a[20] = "ciao";
char b[5] = "b2b\n";
printf("%d", strcat(a, b));

Ciao. :ciauz:

pprllo
11-01-2005, 19:17
Sei sicuro di aver provato questo ?



char *a = "a2a\n";
char *b = "b2b\n";
strcat(a, b);
printf("%s", a);


E' davvero strano perch a me Borland C++ 5.5.1 su Windows XP lo compila e funziona perfettamente ... :dh:

minoz
11-01-2005, 19:33
Originariamente inviato da pprllo
Sei sicuro di aver provato questo ?



char *a = "a2a\n";
char *b = "b2b\n";
strcat(a, b);
printf("%s", a);


E' davvero strano perch a me Borland C++ 5.5.1 su Windows XP lo compila e funziona perfettamente ... :dh:

Di fatti corretto in quanto scrivere *a ed a[] la meddesima cosa, e solo in questo caso si fa senza specificare la dimensione in quanto viene ricavata dall'assegnamento: char *a = "a2a\n"; e viene aggiunto anche il terminatore quindi uguale a scrivere: char a[4] = "a2a\n";

:)

minoz
11-01-2005, 19:34
Originariamente inviato da minoz
Di fatti corretto in quanto scrivere *a ed a[] la meddesima cosa, e solo in questo caso si fa senza specificare la dimensione in quanto viene ricavata dall'assegnamento: char *a = "a2a\n"; e viene aggiunto anche il terminatore quindi uguale a scrivere: char a[4] = "a2a\n";

:)

oppure anche char a[] = "a2a\n"

Loading