更改字符串值会引发分段错误
可能重复:
为什么简单的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; }