更改字符串值会引发分段错误

可能重复:
为什么简单的C代码会收到分段错误?

嗨,

看看下面的代码:

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替换每个’。’ 用’;’ (分隔符)。 但是,行str [i] = SEPERATOR; 抛出分段错误,我不知道为什么。 是什么原因,我该如何解决?

感谢大家

char *a = "blah"; 声明一个指向字符串文字的指针。 这些不能改变(好吧,结果是未定义的)。 你可能想尝试char a[] = "blah"; 相反,因为这给你一个字符数组。

不要试图修改字符串常量。 请改用数组。

 char[] a = "zxftea"; 

等等

a是指向字符串文字的指针(您无法修改)。 改变它的定义。

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