Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Isn';t'\0';!=真的吗?_C_String_Ascii_Infinite Loop_Nul - Fatal编程技术网

C Isn';t'\0';!=真的吗?

C Isn';t'\0';!=真的吗?,c,string,ascii,infinite-loop,nul,C,String,Ascii,Infinite Loop,Nul,我在理解循环的条件时遇到一些困难,而循环如下所示: 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

我在理解
循环的条件时遇到一些困难,而
循环如下所示:

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

这不是一个无限循环吗?

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

这不是一个无限循环吗

因此,不,它不是一个无限循环,因为假设
\0
0
是不同的。但对于不在本问题范围内的其他因素,循环可能是无限的

C11规格部分5.2.1/2字符集

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


也许你犯了错误。您可以查找ASCII表,
'\0'-->0,'0'-->48

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

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

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

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

您似乎对ascii字母“0”和“\0”有点混淆。第一个是ascii字符“0”,根据ascii表,该字符有一个等效的数字(48)。但是,当使用零“\0”之前的转义栏时,您使用的是空字符(与空数字不同),顺便说一下,它的所有位都为零。因此,所有位均设置为零的ascii字符与数字0相同


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

'\0'=0
为false。是的,这是一个无限循环,因为你不增加
i
'\0'
'0'
@CoolGuy不同,我现在编辑了这个问题,没有增加,我是一个打字错误,我不知道怎么做
\0=0为false
@Patel,原因与
'a'!=97
为假。参见和@Patel:If
'\0'
等于
0
=表示“不相等”,则
“\0”!=0
不是真的。“不正确”等于“错误”。所以
“\0”!=0
为“false”。那么“\0”为空字符,ASCII值为0,0的ASCII值为48,因此在上述情况下,条件0被视为字符文本rt,ASCII值为48?@Patel
0
'0'
不同
0
等于
'\0'
,两者都不等于
'0'