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

NPS*_*NPS 1 null-terminated nullptr c++11

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

Fil*_*efp 7

NULL并且nullptr与以null结尾的字符串几乎没有关系.双方NULLnullptr用来表示指向什么,即一个指针.null.

c样式字符串的空终止仍然(并且一直)由CharT具有整数值的a表示0; 或者通常在谈话时写的,通过字面意思 ; '\0'.

请记住,字符类型只不过是具有某些特殊含义的整数类型.

允许比较a char到a int(它是文字的类型0),它也允许将值赋给0a char,如上所述:字符类型是整数类型..并且整数类型包含整数值.


为什么会这么混乱?

回到我们没有的日子nullptr,我们用宏NULL来表示某个指针没有任何指向.值NULL是,并且是特定实现的,但行为是明确定义的; 它不应该与任何实际指向某事物的指针值相等.

由于NULL描述了大量编译器#define NULL 0或类似构造的行为,导致了一个"特征",可以很容易地与NULL任何整数类型(包括char)进行比较,看它是否与零值相关.


如前所述,您经常偶然发现下面的代码,其中for-condition将等同于*ptr != 0.

char const * str = "hello world";

for (char const * ptr = str; *ptr != NULL; ++ptr) {
  ...    
}
Run Code Online (Sandbox Code Playgroud)

获得的经验教训:仅仅因为某些工作并不意味着它是正确的......