首页 > 解决方案 > '\0' 和 string.length() 之间的关系有问题

问题描述

#include<iostream>
using namespace std;
int main()
{
    string s = "AA";
    cout << s.length() <<"    "<< s << endl;
    s[1] = '\0';
    s[0] = '\0';
    cout << s.length() <<"    "<< s << endl;
    string w = "\0";
    cout << w.length() <<"    "<< w << endl;
    return 0;
}

输出

2    AA
2
0

为什么第二个输出是 2 而不是 0?
我试图在互联网上找到答案,但找不到。
有人可以回答我吗?

谢谢你

标签: c++

解决方案


由于 C++11 保证 astd::string是以 null 结尾的,但是将任何\0char 添加到字符串不会改变其长度。

在 C++ 中,字符串可以包含\0char,因为它的长度完全由存储在对象中的大小定义,而不是\0字符串中任何 char 的出现。

如果您希望\0字符串中任何位置的字符影响其长度,则需要手动调整字符串大小:

s.resize(strlen(s.c_str()))

但是,如果您已经知道放置\0字符的位置,那么您应该s.resize()从一开始就使用来调整字符串的大小,而不是放置\0字符。


推荐阅读