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

时间:2010-08-23 17:44:00

标签: c

  

可能重复:
  Why does simple C code receive segmentation fault?

您好,

查看以下代码:

int main(int argc, char* argv[]){

    char* a = "z.x.f.t.e.a";
    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; 抛出分段错误,我不知道为什么。是什么原因,我该如何解决?

谢谢大家

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

不要尝试修改字符串常量。改为使用数组。

char[] a = "z.x.f.t.e.a";

答案 2 :(得分:1)

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

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