perchè mi da "Segmentation fault"?codice:char *a = "a2a\n"; char *b = "b2b\n"; printf("%s", strcat(a, b));![]()
![]()
![]()
perchè mi da "Segmentation fault"?codice:char *a = "a2a\n"; char *b = "b2b\n"; printf("%s", strcat(a, b));![]()
![]()
![]()
P.
se non ricordo male, strcat non ritorna un nuovo char*, ma modifica uno dei puntatori passati, cioè tu dovresti fare così:
credo sia così, adesso non riesco a controllarecodice:char* a = "sd"; char* b ="sg"; strcat(a, b); printf("%s", a);
![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)
strcat non restituisce una stringa. strcat concatena semplicemente la seconda stringa alla prima. Devi fare.
codice:char *a = "a2a\n"; char *b = "b2b\n"; strcat(a, b) printf("%s", a);
Appunto![]()
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.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
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.
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:
e pure questo, anche se non stampa certo il risultato voluto:codice:char a[20] = "ciao"; char b[5] = "b2b\n"; strcat(a, b); printf("%s", a);
Ciao.codice:char a[20] = "ciao"; char b[5] = "b2b\n"; printf("%d", strcat(a, b));![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Sei sicuro di aver provato questo ?
E' davvero strano perchè a me Borland C++ 5.5.1 su Windows XP lo compila e funziona perfettamente ...codice:char *a = "a2a\n"; char *b = "b2b\n"; strcat(a, b); printf("%s", a);![]()
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";Originariamente inviato da pprllo
Sei sicuro di aver provato questo ?
E' davvero strano perchè a me Borland C++ 5.5.1 su Windows XP lo compila e funziona perfettamente ...codice:char *a = "a2a\n"; char *b = "b2b\n"; strcat(a, b); printf("%s", a);![]()
![]()
oppure anche char a[] = "a2a\n"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";
![]()