I puntatori di caratteri in C mi confondono.Confusione sui puntatori di caratteri in C
Supponiamo di avere un puntatore char, che punta al primo carattere della stringa costante.
char *a="ABCD";
allora non possiamo cambiare il valore di quel personaggio utilizzando il puntatore di una, come in seguito i risultati economico in un errore di segmentazione.
*a='X';
Supponiamo ora di avere un puntatore char, che punta a un personaggio costante.
const char B='X';
char *ptr=&B;
Poi ci sono autorizzati a modificare il valore di quel personaggio utilizzando l'istruzione
*ptr='Z';
La mia domanda è che questo è un caso di comportamento non definito dimostrando C non è robusto? O c'è una logica più profonda coinvolta?
@EugeniuRosca intendi 'char const * a =" ABCD "'. Non hanno la stessa semantica. – Quentin
const indica che la memoria è in sola lettura. Periodo. Non sei autorizzato a cambiarlo facendo riferimento a un altro puntatore - questo dovrebbe generare un avviso del compilatore. –
Dai un'occhiata a http://stackoverflow.com/questions/2589949/c-string-literals-where-do-theygo – xp500