我正在编写一个程序,我需要将一个字符串(最初未知的长度)复制到另一个字符串的字符串。
我编写的代码运行完美。
string a = "Hello";
string b( a.length(), 'a');
for (int i = 0; i < a.length(); i++)
b[i] = a[i];
但是,因为C ++中字符串的大小是动态计算的
string k = "Hello";
string l = "Hello World";
string m = k;
m = l;
没有给出任何错误。所以很明显,字符串变量的大小会根据需求动态变化。
所以我尝试了同样的方法而没有定义变量b
的大小。
string a = "Hello";
string b;
for (int i = 0; i < a.length(); i++)
b[i] = a[i];
但在这种情况下,我的程序崩溃并说字符串下标超出范围。
为什么不在这种情况下变量b
的大小正在增加?
错误的原因是什么?如何在不提及任何变量大小的情况下实现这一目标?
答案 0 :(得分:4)
如果必须,您可以使用push_back
:
string a = "Hello";
string b;
for (int i = 0; i < a.length(); i++)
b.push_back(a[i]);
甚至 1
string a = "Hello";
string b;
for (auto c : a)
b.push_back(c);
但为什么?
参考:http://en.cppreference.com/w/cpp/string/basic_string/push_back
1 但如果以任何方式更改a
,请不要这样做:基础迭代器将失效。
答案 1 :(得分:2)
答案 2 :(得分:0)
字符串的大小是动态的,但它不会像您期望的那样自动更改。 operator []只返回第i个元素,如果字符串的当前大小小于i,则填充失败。这取决于你确保字符串的大小足够大。
如果您无法提前调整字符串大小,可以查询大小,将其增加1,请求字符串调整大小,并设置最后一个字符。
这就是push_back方法的工作原理