也许它很愚蠢或明显,但我无法谷歌任何答案。什么字符在C++11
中结束以空字符结尾的字符串? NULL
(实际上是0
)或新nullptr
?一方面,nullptr
应该替换NULL
。但另一方面,我不确定nullptr
是否是一个角色。或者可以解释为一个。
答案 0 :(得分:7)
NULL
和nullptr
与以null结尾的字符串无关。 NULL
和nullptr
都用于表示指向任何内容的指针,即。 空
c-style字符串的空终止仍然(并且一直)由具有整数值CharT
的{{1}}表示;或者,通过 char-literal 进行交谈时最常写的; 0
。
请记住,字符类型只不过是具有某些特殊含义的整数类型。
允许将'\0'
与char
(文字类型int
)进行比较,也可以将值0
分配给a 0
,如上所述:字符类型是整数类型。整数类型包含整数值。
为什么会出现这种混乱?
回到我们没有char
的日子,相反,我们让宏nullptr
表示某个指针没有任何指向的东西。 NULL
的值是,并且是特定于实现的,但行为是明确定义的; 它不会与任何实际指向的指针值相等。
由于NULL
的行为如何被描述,大量编译器使用了NULL
或类似的构造,导致了一个"特征"人们可以轻松地将#define NULL 0
与任何整数类型(包括NULL
)进行比较,看看它是否与零值相关。
如前所述,您经常偶然发现下面的代码,其中 for-condition 等同于char
。
*ptr != 0
经验教训:仅仅因为某些工作并不意味着它是正确的......
答案 1 :(得分:1)
NULL
和nullptr
与" null终止符"完全不同。他们没有比“#34; null"”这个词更多的共同点。 null终止符是值为0
的字符。它与空指针无关。
您可以使用0
或'\0'
等