【发布时间】:2021-10-21 06:06:08
【问题描述】:
string s="1 23";
string a;
a[0]=s[2];a[1]=s[3];
cout<<a;
在这里,我无法获得输出字符串 a。但我可以通过 a[0] 获取所有单个元素。
【问题讨论】:
-
考虑
string a;创建一个 0 个字符的字符串。一个“空字符串”。你的代码试图用这 0 个字符做什么?
string s="1 23";
string a;
a[0]=s[2];a[1]=s[3];
cout<<a;
在这里,我无法获得输出字符串 a。但我可以通过 a[0] 获取所有单个元素。
【问题讨论】:
string a; 创建一个 0 个字符的字符串。一个“空字符串”。你的代码试图用这 0 个字符做什么?
因为a 是空的,a[i] 对每个可能的i 都会越界访问它,从而导致未定义的行为。
使用a.push_back(s[i]) 将字符添加到a。
【讨论】:
a += s[i]
a 被初始化为一个空字符串,因此没有为其字符分配内存,因此当使用[] 访问它时,您访问的是未分配的内存,这是未定义的行为。
解决它的一种方法是将a 创建为分配了足够字符的字符串。您可以使用std::string fill 构造函数,用您选择的字符填充字符串:
std::string s = "1 23";
std::string a(s.size(), ' ');
这样您就可以将字符放入s 中存在的任何索引中。
【讨论】: