如何在C ++ 11中终止以null结尾的字符串?

时间:2014-03-16 23:22:40

标签: c++11 null-terminated nullptr

也许它很愚蠢或明显,但我无法谷歌任何答案。什么字符在C++11中结束以空字符结尾的字符串? NULL(实际上是0)或新nullptr?一方面,nullptr应该替换NULL。但另一方面,我不确定nullptr是否是一个角色。或者可以解释为一个。

2 个答案:

答案 0 :(得分:7)

NULLnullptr与以null结尾的字符串无关。 NULLnullptr都用于表示指向任何内容的指针,即。

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)

NULLnullptr与" null终止符"完全不同。他们没有比“#34; null"”这个词更多的共同点。 null终止符是值为0的字符。它与空指针无关。

您可以使用0'\0'