不是' \ 0' != 0是真的吗?

时间:2015-06-11 05:48:10

标签: c string ascii infinite-loop nul

我在理解下面给出的while循环的条件时遇到了一些困难:

int main()
{
    char s[]="Let's Get it Started";
    int i=0;
    while(s[i]!=0)
    { 
       //do something
       ++i

    }
}

我知道字符串存储的最后一个字符为\0,其ASCII值为0。在while循环中,它正在比较数组的特定字符的值。所以当它达到\0条件时就像

'\0' != 0 // I guess this is also true

所以这不是一个无限循环吗?

3 个答案:

答案 0 :(得分:4)

C中,'\0'0具有相同的值(甚至类型)。两者都是int0值。

  

所以这不是一个无限循环吗?

所以,不是因为假设\00不同而不是无限循环。但是对于不在本问题范围内的其他因素,这些循环可能会被激活。

来自 C11 规格部分 5.2.1 / 2字符集

  

所有位都设置为0的字节,称为空字符,应存在   在基本执行字符集中;它用于终止一个   字符串。

答案 1 :(得分:1)

也许你遇到了错误。你可以寻找ASCII表'\0'-->0, '0'-->48

在您的密码while(s[i] != 0)中,0int,而不是char,因此'\0' == 0 is true

顺便说一句,您可以在下面编写代码:

int a = '\0';
int b = '0';
printf("%d  %d\n", a, b);

我相信你可以清楚地知道这些问题。所以这不是一个无限循环。

答案 2 :(得分:1)

你似乎在ascii字母'0'和'\ 0'之间产生了一些混淆。第一个是ascii字符'0',根据ascii表有一个等价的数字(48)。但是当在零'\ 0'之前使用转义栏时,您使用的是空字符(与空数不同),顺便说一下,它的所有位都归零。因此,将其所有位设置为零的ascii字符与数字0相同。

因此,这不是一个无限循环,因为在比较结尾的空字符时,它等于数字0.