2016-11-12 60 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') 

这将解决您的问题。