又遇到了'\0' null NULL 的问题了

阅读 3.5k
2 个回答

如果是char*的字符串,库函数都是默认以'\0'结尾。
如果是std::string,是作为串的形式的,并没有以'\0'结尾的规定,因为string已经重载了operator <<,所以不存在需要用'\0'结尾的问题。
实际上,即使std::string里面的字符包含了'\0',string::operator << 也会一视同仁,继续输出后面的。

#include <string>
#include <iostream>

int main()
{
    std::string s = "hello";
    s[1] = '\0';
    std::cout << s << std::endl;
    return 0;
}

输出:h llo

所谓 null-terminated 中的 null 指的应该是 ASCII 字符集里的 NUL,其编码是数字 0,在 C 语言里是 '\0',本质是一个 char
而 C 语言里 NULL 这个宏指的是空指针,也就是 ((void*)0),是一个指针类型。
两者类型不同,本质上是不同的概念,用途也不同。
你引用的 stackoverflow 上的原贴讨论的应该是这个问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏