2010-08-23 27 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";,因爲這會爲您提供字符數組。