C99
标准要求“所有位设置为0的字节,称为null character
,应存在于基本执行字符集中;它用于终止字符串。” (5.2.1.2)然后继续列出必须在执行集中的99个其他字符。是否可以使用其中空字符是这99个字符之一的字符集?特别是,是否允许'0' == '\0'
?
修改:每个人都指出,在ASCII中,'0'
为0x30
。这是事实,但标准并未强制要求使用ASCII。
答案 0 :(得分:3)
无论你使用ASCII,EBCDIC还是“自制”的东西,'0'
必须与'\0'
不同,因为你自己提到了:
所有位设置为0的字节,称为
null character
,应存在于基本执行字符集中;它用于终止字符串。 (5.2.1.2)
如果空字符终止字符串,则不能包含在该字符串中。它是唯一不能包含在字符串中的字符;可以使用所有其他字符,因此必须与0不同。
答案 1 :(得分:3)
我不认为标准规定它列出的每个字符(包括空字符)都有一个不同的值,而不是数字。但是包含值0
的“字符集”据称代表100个必需字符中的91个,显然不是包含所需100个字符的字符集。所以这是:
选择。
答案 2 :(得分:2)
对于'0'='\0'
,您将无法区分字符串的结尾和'0'
值。
因此,使用像“0_any_string”这样的东西会有点困难,因为它已经从'0'
开始。
答案 3 :(得分:1)
不,它不能。字符集必须由内射函数描述,即将每个字符精确映射到一个不同的二进制值的函数。将2个字符映射到相同的值将使字符集不确定,即计算机将无法将数据解释为匹配字符,因为多个字符适合。
C99标准通过强制将null
字符映射到特定二进制值来提出另一个限制。鉴于上述段落,这意味着没有其他字符可以具有与null
相同的值。
答案 4 :(得分:-1)
整数常量字面值0具有不同的含义,具体取决于 它使用的上下文。在所有情况下,它仍然是一个整数 值为0的常数,只是用不同的方式描述。
如果将指针与常量字面值0进行比较,那么这是 检查指针是否为空指针。那么这就是0 称为空指针常量。 C标准定义为0 强制类型void *既是空指针又是空指针 恒定。