[C] Dubbio dichiarazione Stringa
Buonasera ragazzi, volevo esporvi un mio dubbio.
Date le seguenti dichiarazioni:
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!!
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
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.
Nel secondo caso la stringa costante viene copiata nella stringa non costante.
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?
"Surimi":
https://stackoverflow.com/questions/3207286/c-strings-pointer-vs-arrays
Grazie anche per questo post molto chiaro!
Buonaserata ragazzi!