2

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

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

    }
}

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

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

那么这不是无限循环吗?

4

3 回答 3

4

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

那么这不是无限循环吗?

所以,不,它不是无限循环,因为假设\00不同。但是对于不在这个问题范围内的其他因素,循环可能是无限的。

来自C11规范第5.2.1/2 节字符集

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

于 2015-06-11T05:49:40.193 回答
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);

我相信你能清楚地知道问题所在。所以它不是一个无限循环。

于 2015-06-11T07:01:09.743 回答
1

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

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

于 2015-06-11T07:10:24.443 回答