obtenir une erreur de segmentation dans un petit programme c

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...