2012-09-23 79 views
0
/* squeeze: delete all c from s */ 
void squeeze(char s[], int c) 
{ 
    int i, j; 
    for (i = j = 0; s[i] != '\0'; i++) 
    if (s[i] != c) 
     s[j++] = s[i]; 
    s[j] = '\0'; 
} 

int main(void) 
{ 
    squeeze("squeeze", 'z'); 
    return 0; 
} 

我用gcc編譯它並運行它,結果得到了分段錯誤。 這個例子有什麼問題嗎?是K&R第2章的這個例子嗎?

感謝男人,我剛剛犯了一個平常的錯誤。

+5

你傳遞了​​一個字符串,函數試圖改變它。 – cnicutar

+0

哎呀!原諒我吧! –

回答

4

您的示例顯示您試圖將squeeze()應用於字符串文字("squueze")。這是不正確的,因爲字符串文字不總是可以修改的,所以嘗試使用 來修改它們是無效的。你需要用一個字符數組來調用它:

#include <stdlib.h> 

int main(void) 
{ 
    char test[] = "squeeze"; 

    squeeze(test, 'z'); 
    return EXIT_SUCCESS; 
} 
+0

thx,我知道。 –