我遇到了一个关于C++字符串和空字符的问题。
当我在字符串中间写入'\0'并打印该字符串时,我只能得到'\0'之前的部分,但是当我将字符串作为输入并更改任何索引为'\0'时,它的打印结果会不同。为什么会这样?而且为什么在两种情况下sizeof(string)都是32?
参考代码如下,请帮忙解答。
第一个代码:
第二段代码的输出:
以下是供您参考的图片。
第一个代码:
#include<iostream>
using namespace std;
int main(){
string s = "he\0llo";
cout<<s.length()<<"\n";
cout<<s<<endl;
cout<<sizeof(s)<<"\n";
}
第一个代码的输出:
2\n
he\n
32\n
第二段代码
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
s[1] = '\0';
cout<<s<<"\n";
cout<<s.length()<<"\n";
cout<<sizeof(s)<<"\n";
return 0;
}
第二段代码的输出:
hllo\n
5\n
32\n
以下是供您参考的图片。
![这里输入图片描述](https://istack.dev59.com/qhPXi.webp)
sizeof(s)
表示的是std::string
对象本身的大小,与实际字符串中的数据量无关。请注意不要改变原文意思。 - Retired Ninjastring s = "he\0llo";
改为auto hello = "he\0llo"; string s(hello, hello + sizeof hello - 1);
。 - Eljay