j’ai écrit un petit prog:
1 #include 2 main(){ 3 char* str = "ssortingng"; 4 *str = 'k'; 5 printf("ssortingng is = %s\n",str); 6 }
Ce programme est compilé sans erreur ni avertissement, mais lorsque je le lance, il donne une erreur de segmentation. Tandis que si je réécris la 3ème ligne comme suit: char str [] = “chaîne”; ce programme fonctionne parfaitement bien. Quelqu’un peut-il s’il vous plaît laissez-moi savoir quel est le problème ici ??? Quelle est la différence entre ces deux manières différentes d’écrire la 3ème ligne. Toute aide est la bienvenue. Merci.
char * str = "ssortingng";
déclare un pointeur qui pointe vers une zone de mémoire où la chaîne "ssortingng"
est stockée; C’est un comportement indéfini d’écrire dans cette zone de mémoire, et il en résulte généralement un crash.
Au lieu de cela, vous devriez utiliser:
char str[]="ssortingng";
qui déclare une chaîne locale à votre fonction, initialisée à la valeur "ssortingng"
. Puisque la mémoire que vous utilisez pour cette chaîne est locale à votre procédure, vous pouvez la modifier à votre guise.
char* str = "ssortingng";
Cela met la chaîne en mémoire en lecture seule. Il s’agit d’un comportement non défini (généralement désagréable) lorsque vous essayez de le modifier à la ligne suivante. Essayez quelque chose comme
char str[] = "ssortingng";
au lieu.
I also executed the given code.. 1 #include 2 main(){ 3 char* str = "ssortingng"; 4 *str = 'k'; 5 printf("ssortingng is = %s\n",str); 6 } But there is no such error. Following output is shown.... Ssortingng is=Ksortingng A segmentation fault, bus error, or access violation is generally an attempt to access memory that the CPU cannot physically address. So in my opinion it's completely depends on execution. thanks...