2016-11-12 42 views
0

字符*的我有這樣一段代碼結束用C

int main() 
{ 
    char* word = "kotok"; 
    char* word1 = word; 
    while (word1 != '\0'){ 
     printf("%s ", word1); 
     word1++; 
    } 
    return 0; 
} 

但它打印 「科托克,奧托克,TOK,OK,K」 之後並沒有結束。此代碼繼續打印一些垃圾,然後停止。如何克服它?

我試圖添加word1[strlen(word1)] = '\0';但它給出了分段錯誤。

+1

當您嘗試分配時,您試圖修改調用'未定義行爲'的字符串文字。崩潰對未定義的行爲是完全可以接受的迴應;如果沒有任何事情發生,或者重新格式化磁盤,或者...(您可以執行Google搜索'鼻子守護進程',或查看[每個C程序員應該知道關於未定義行爲的內容](http://blog.llvm。 org/2011/05/what-every-c-programmer-should-know.html)。)不要調用未定義的行爲。 –

回答

6

word1是一個指針。 '\0'是一個字符。這就是爲什麼word1 != '\0'不符合你的期望。

你必須取消引用指針讓它指向字符:

while (*word1 != '\0') { 
2

word1是一個指針。因此不爲空,零

您需要更改

while (word1 != '\0'){ 

while (*word1 != '\0'){ 

以尊重指針

1

你的邏輯,你正在檢查的最後一個字符匹配「\ 0」 不工作,因爲在所有「字1 「是指向另一個指針」詞「的指針。

所以它需要與*取消引用。 嘗試改變

while (word1 != '\0') 

while (*word1 != '\0') 

這將解決您的問題。