2012-12-24 1 views
0

Possible en double:
Why does char* cause undefined behaviour while char[] doesn’t?D'où provient le défaut de segmentation dans ce code?

S'il vous plaît jeter un oeil sur le code ci-dessous

int main (int argc, char* argv[]) 
{ 
    char* s = "Hello world!"; 
    s[0] = 'X'; 
    return 0; 
} 

où la faute ne seg viennent dans ce code?

Mise à jour: Au contraire le code ci-dessous ne donne pas de faute de seg, pourquoi?

int main (int argc, char* argv[]) 
{ 
    char s[] = "Hello world!"; 
    s[0] = 'X'; 
    return 0; 
} 
+2

Voir la copie. Bref, 'char * s = « Bonjour tout le monde! »,' Permet de pointer 'de s' à (le premier caractère) une chaîne littérale, et de tenter de modifier une chaîne littérale est un comportement non défini, souvent un accident parce qu'ils sont stockés dans mémoire en lecture seule. 'char s [] =" Hello World! ";' crée un caractère accessible en écriture '[13]'. –

+0

Pouvons-nous avoir une étiquette distincte pour cette dupe en particulier? 'char * variable =" chaîne "; variable [0] = 'ch'; ;) – anishsane

Répondre

3

"Hello world!" est une chaîne statique, vous ne pouvez pas le changer.

+0

s'il vous plaît voir ma mise à jour en question et veuillez mettre à jour la réponse, merci! – daNullSet

Questions connexes