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

C++中string的length()遇'\0'为何仍返回9?

问题解答

你的代码如下:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string test1 = "abcdefghi";
    test1[2] = '\0';
    cout << test1.length()<< endl;
    system("pause");
    return 0;
}

实际输出9而非预期的8,核心原因是C++的std::string不依赖'\0'来确定长度:

  • C风格字符串(比如char[])靠'\0'作为结束标记,strlen()这类函数会数到第一个'\0'就停止计数。
  • 但std::string是标准库封装的字符串类,它内部会单独维护一个记录实际长度的变量。你修改test1[2] = '\0'只是把字符串的第三个字符改成了空字符,并没有改变std::string存储的长度值,所以length()依然返回初始的9。

如果用cout输出这个字符串,你会发现只显示到'ab'就停了——这是因为cout处理std::string时,输出逻辑和C风格字符串一致,遇到'\0'就终止输出,但这并不影响std::string自身记录的长度。

如果想要让字符串的长度变为8,你需要主动修改它的长度,比如使用resize()方法:

test1.resize(8); // 将字符串长度设置为8,此时length()会返回8

或者如果你想模拟C风格字符串的长度计算,可以调用c_str()获取C风格指针后用strlen():

cout << strlen(test1.c_str()) << endl; // 输出2,因为第一个'\0'在索引2的位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:29:58