【发布时间】:2021-12-22 01:34:09
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
string a("Hello World",20);
cout<<a<<endl;
return 0;
}
我得到的输出是“Hello WorldP”。为什么? 通常我们只用数据初始化字符串。但这里我给出了大小。但这需要瘾君子。 所以我不想给出尺寸吗?
【问题讨论】:
-
因为你告诉你的字符串,传递的 (C-)String 是 20 个字符长,即使它不是。因此,它会在内存中获取“终止 0 之后的任何内容”并将其附加到字符串中。
<<最终采用“整个字符串”,而不仅仅是“直到第一个\0的字符串”。 -
你为什么把
,20放到string a("Hello World",20);中?你想达到什么目的? -
缓冲区溢出演示:godbolt.org/z/6Y4fYMq1q 使用地址清理器