changer une valeur de chaîne provoque une erreur de segmentation

Dupliquer possible:
Pourquoi le code C simple reçoit-il une erreur de segmentation?

Salut,

vérifiez le code suivant:

int main(int argc, char* argv[]){ char* a = "zxftea"; char* b = "."; updateStr(a,b); return 0; } int updateStr(char str[], const char* delim) { int i=0; int wordsCounter = 0; while (str[i] != '\0') { if (contains(delim,str[i])) { printf("CONTAINED %c\n",str[i]); //debug str[i] = SEPERATOR; wordsCounter++; } i++; } //REST OF THE CODE.... return wordsCounter; } 

updateStr remplace chaque ‘.’ avec ‘;’ (Séparateur). Cependant, la ligne str [i] = SEPERATOR; jette faute de segmentation et je ne sais pas pourquoi. Quelle est la raison et comment puis-je résoudre ce problème?

Merci tout le monde

char *a = "blah"; déclare un pointeur sur un littéral de chaîne. Celles-ci ne peuvent pas être modifiées (le résultat est indéfini). Vous voudrez peut-être essayer char a[] = "blah"; à la place, cela vous donne un tableau de caractères.

N’essayez pas de modifier les constantes de chaîne. Utilisez un tableau à la place.

 char[] a = "zxftea"; 

etc.

a est un pointeur sur un littéral de chaîne (que vous ne pouvez pas modifier). Changer sa définition.

 int main(int argc, char* argv[]){ char a[] = "zxftea"; /* will be on the stack */ char* b = "."; updateStr(a,b); return 0; }