[C] Dubbio dichiarazione Stringa

luca661
Buonasera ragazzi, volevo esporvi un mio dubbio.

Date le seguenti dichiarazioni:

char *s="a";
char v[]="a";


Non riesco a capire il perché la seguente stringa di codice funzioni perfettamente v[0]='K'
quindi data v[]={'a','\0'} lo faccio diventare v[]={'K','\0'}
mentre se prendo il puntatore s alla stringa {'a','\0'} e scrivo s[0]='K' mi da errore in fase di esecuzione.
Ovviamente 'K' è un carattere generico. Il professore ha giustificando ciò dicedo che:

char *s="a"; genera un puntatore ad una "stringa costante". Che significa stringa costante ? In memoria non dovrebbe essere rappresentato come un vettore del tipo {'a','\0'} dove s punta alla "testa" di questo vettore?

Vi ringrazio in anticipo!!

Risposte
Surimi

vict85
Le stringhe costanti e in generale le costanti sono salvate spesso in una specifica parte dell'eseguibile e quindi non sono davvero allocate durante l'esecuzione del codice. Insomma, quello è di fatto un puntatore ad una parte protetta della memoria a cui il programma non ha potere di scrittura.

Nel secondo caso la stringa costante viene copiata nella stringa non costante.

luca661
Ok perfetto risposta molto chiara. Quindi diciamo è un dettaglio tecnico del compilatore che associa una scrittura ad un area protetta della memoria mentre l'altra no, niente di più giusto?

luca661
"Surimi":
https://stackoverflow.com/questions/3207286/c-strings-pointer-vs-arrays

Grazie anche per questo post molto chiaro!

Buonaserata ragazzi!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.