2010-08-23 54 views
0

可能重复:
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; 抛出分段错误,我不知道为什么。什么原因,我该如何解决它?

谢谢大家

+0

重复多次。 – 2010-08-23 17:45:37

+0

你应该明确地声明'a'是一个char数组,而不是char指针 – 2010-08-23 17:46:28

+0

@Carl Agree,但是标题可能会有所不同,因此不能在快速搜索中找到。 – Tom 2010-08-23 17:49:20

回答

1

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

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

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; 
} 
2

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