View Single Post
Old 02-02-2007, 20:27   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Attento che un comportamento del genere può portare a degli errori grossolani...

Ad esempio:
Codice:
void foo(char *s)
{
   s = "abcdefgh";
}
La stringa s non conterrà "abcdefgh" dopo la terminazione di foo..."abcdefgh" è una constante stringa, ora non mi ricordo come si comporti il compilatore, cioè se le dichiara globalmente o se siano valide solo all'interno dello scope, ma fatto sta che il valore di s non sarà modificato nel chiamante...
Ricordati che devi sempre allocare lo spazio per le stringhe su cui deve lavorare, ci sono pochi casi in cui ti basta che il puntatore punti alla costante stringa...

Se fai così:

char *s = "abcdefgh";

s punta alla costante stringa, ma non potrai mai utilizzare s per contenere altre stringhe, in quanto è un semplice puntatore.

Quindi ricordati sempre di allocare la memoria necessaria per contenere le stringhe...o in maniera statica:

char s[] = "abcdefgh"; //ti allocherà un char s[9]

o in maniera dinamica:

char *s;
...
s = (char *)malloc(9 * sizeof(char));

strcpy(s, "abcdefgh");

In quest'ultimo modo puoi anche allocare le stringhe per le strutture...
cionci è offline   Rispondi citando il messaggio o parte di esso