null字符可以用来表示零字符吗?

时间:2013-03-25 08:29:59

标签: c

C99标准要求“所有位设置为0的字节,称为null character,应存在于基本执行字符集中;它用于终止字符串。” (5.2.1.2)然后继续列出必须在执行集中的99个其他字符。是否可以使用其中空字符是这99个字符之一的字符集?特别是,是否允许'0' == '\0'

修改:每个人都指出,在ASCII中,'0'0x30。这是事实,但标准并未强制要求使用ASCII。

5 个答案:

答案 0 :(得分:3)

无论你使用ASCII,EBCDIC还是“自制”的东西,'0'必须与'\0'不同,因为你自己提到了:

  

所有位设置为0的字节,称为null character,应存在于基本执行字符集中;它用于终止字符串。 (5.2.1.2)

如果空字符终止字符串,则不能包含在该字符串中。它是唯一不能包含在字符串中的字符;可以使用所有其他字符,因此必须与0不同。

答案 1 :(得分:3)

我不认为标准规定它列出的每个字符(包括空字符)都有一个不同的值,而不是数字。但是包含值0的“字符集”据称代表100个必需字符中的91个,显然不是包含所需100个字符的字符集。所以这是:

  • “a character set”的英文定义的一部分,
  • 从背景来看很明显,
  • 标准文本中的一个非常小的缺陷,它应该拼写出来以防止一个不忠实的实施者故意误解。

选择。

答案 2 :(得分:2)

对于'0'='\0',您将无法区分字符串的结尾和'0'值。

因此,使用像“0_any_string”这样的东西会有点困难,因为它已经从'0'开始。

答案 3 :(得分:1)

不,它不能。字符集必须由内射函数描述,即将每个字符精确映射到一个不同的二进制值的函数。将2个字符映射到相同的值将使字符集不确定,即计算机将无法将数据解释为匹配字符,因为多个字符适合。

C99标准通过强制将null字符映射到特定二进制值来提出另一个限制。鉴于上述段落,这意味着没有其他字符可以具有与null相同的值。

答案 4 :(得分:-1)

  

整数常量字面值0具有不同的含义,具体取决于   它使用的上下文。在所有情况下,它仍然是一个整数   值为0的常数,只是用不同的方式描述。

     

如果将指针与常量字面值0进行比较,那么这是   检查指针是否为空指针。那么这就是0   称为空指针常量。 C标准定义为0   强制类型void *既是空指针又是空指针   恒定。

What is the difference between NULL, '\0' and 0