You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字符串中'\0'与"\0"的差异及表现差异原因咨询

为什么C++ std::string添加'\0'和"\0"的结果不同?

首先要明确:C++的std::string并不依赖空终止符(\0)来管理自身的长度,它内部有独立的成员变量记录字符串的实际长度,所以'\0'对std::string来说就是一个普通的ASCII值为0的字符,不会被当作字符串的终止标志。

接下来具体分析两种操作的差异:

  1. test1 += "\0"的情况
    "\\0"是一个C风格字符串字面量,而C风格字符串的定义就是以第一个'\0'作为结束标志。当std::string的operator+=接收const char*类型的参数时,会从指针指向的位置开始读取字符,直到遇到第一个'\0'为止。
    而"\0"这个字面量的第一个字符就是'\0',所以这个操作相当于往test1里添加了0个字符,最终test1.size()还是0。

  2. test2 += '\0'的情况
    '\0'是单个char类型的字符,std::string的operator+=接收char类型参数时,会直接将这个字符追加到字符串的末尾,完全不会因为它是'\0'而特殊处理。所以test2的长度会增加1,test2.size()输出1。

为什么打印test1和test2都显示空字符串?

当用cout打印std::string时,底层会调用std::string::c_str()方法获取C风格的字符串指针,而C风格字符串的输出逻辑是遇到第一个'\0'就停止。

  • test1本身是空字符串,输出自然为空;
  • test2的第一个字符就是'\0',所以cout读取到第一个字符就终止输出,看起来也是空字符串。

内容的提问来源于stack exchange,提问作者Rahul Kumawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:17:49