Pourquoi ce programme donne-t-il une erreur de segmentation?

C’est une question pour les débutants: pourquoi est-ce que cela cède / donne une erreur?

#include  #include  #include  char *strsortingm_right(char *p) { char *end; int len; len = strlen( p); while (*p && len) { end = p + len-1; if(isalpha(*end)) *end =0; else break; } return(p); } int main () { char *x="PM123BFD"; strsortingm_right(x); printf("%s", x); return 0; } 

Changement

 char *x="PM123BFD"; 

à

 char x[]="PM123BFD"; 

Vous ne pouvez pas modifier un littéral de chaîne. Par conséquent, transmettez à la fonction un tableau de caractères qu’elle peut modifier.

Je ne vois pas pourquoi cela devrait casser – je préférerais plutôt une boucle infinie: la condition while sera toujours vraie et la boucle ne sera jamais laissée.

Retravaillez la condition de boucle, elle est bouchée. Regardez ensuite les variables que vous avez: vous ne modifiez jamais les valeurs de p ou de len . Ce n’est pas bien. De plus, le code dans la boucle est beaucoup plus compliqué que nécessaire. Demandez-vous si vous avez vraiment besoin de trois variables ici.

Ok, grâce aux 2 réponses ci-dessus, voici ce qui semble être ok maintenant:

 #include  #include  #include  char *strsortingm_right(char *p) { char *end; int len; len = strlen( p); while (*p && len) { end = p + len-1; if(isalpha(*end)) *end =0; else break; len = strlen(p); } return(p); } int main () { char x[]="PM123BFD"; strsortingm_right(x); printf("%s", x); return 0; }