Comment changer un caractère dans une chaîne en utilisant des pointeurs?

J’ai des problèmes avec ce code

int main() { char *My_St = "abcdef"; *(My_St+1)='+'; printf("%s\n",My_St); return 0; } 

J’ai construit ce code et n’a pas d’erreur, mais lorsque j’essaie de l’exécuter, il génère une erreur de segmentation, quelqu’un pourrait-il dire ce qui ne va pas

Vous ne pouvez pas parce que vous essayez de modifier les données const.

changez le en:

 char My_St[] = "abcdef"; 

Ensuite, vous pourrez le changer.

Pensez à ce que vous faisiez, vous déclariez un pointeur qui désignait "abcdef" . C’EST un pointeur, pas un tableau de caractères. "abcdef" habite la ferme, je veux dire, dans la zone .text de votre programme et c’est immuable.

Lorsque vous le faites comme je l’ai montré, vous dites au compilateur: je déclare ce tableau, qui aura autant de caractères qu’il est nécessaire pour accueillir "abcdef" et, en même temps, copier "abcdef" à cela.

char * My_St fait référence à la mémoire constante, très probablement. Vous devrez allouer dynamicment votre chaîne, puis la remplir (en utilisant strcpy).

 char *str = malloc(7); strcpy(str, "abcdef"); 

Ou

 char *str = strdup("abcdef"); 

Et puis il est prudent de modifier str .

Vous avez fourni un indice au compilateur en déclarant My_St avec le type char * . L’atsortingbution d’un littéral de chaîne à ce pointeur en fait essentiellement un caractère const char * car un littéral de chaîne ne peut pas être modifié, ce qui signifie que l’emplacement mémoire est en lecture seule. L’écriture dans cet emplacement de mémoire en lecture seule est ce qui produit votre erreur de segmentation. Changez-le de char *My_St en char My_St[] pour le faire fonctionner.

Les bases sont correctes, cependant votre chaîne de caractères est (en coulisse) constante et ne peut pas être modifiée. Vous devez définir un tableau de caractères (par exemple, char[20] ), y copier la chaîne, puis modifier le caractère.

Pour être correct à 100%, vous devez écrire const char *My_St = "abcdef"; ce qui rend plus clair que vous ne pouvez pas faire ce que vous essayez de faire.