c++ - '\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++11 保证 astd::string
是以 null 结尾的,但是将任何\0
char 添加到字符串不会改变其长度。
在 C++ 中,字符串可以包含\0
char,因为它的长度完全由存储在对象中的大小定义,而不是\0
字符串中任何 char 的出现。
如果您希望\0
字符串中任何位置的字符影响其长度,则需要手动调整字符串大小:
s.resize(strlen(s.c_str()))
但是,如果您已经知道放置\0
字符的位置,那么您应该s.resize()
从一开始就使用来调整字符串的大小,而不是放置\0
字符。
推荐阅读
- javascript - 如何在全屏时更改 HTML5 页面
- php - PHPMailer 发送邮件但未送达
- ruby-on-rails - 自定义 Omniauth '身份验证失败!csrf_detected'
- html - 为什么当我上传使用手机拍摄的图像时,它会旋转?我该如何解决?
- excel - 将数据从一张纸复制到下一个空行的另一张纸上
- php - php array_walk 查找值的键
- spring-boot - 如何在基于 springboot 的 Web 项目中显示运行时日志记录?
- android - 无法检测到默认活动
- reactjs - 如何在 ReactJS 中连接名字和姓氏?
- css - 带有 CSS 的粘性侧边栏(无 javascript)