length()在c ++中显示为0(尽管string中存储了一个内容)

时间:2017-12-26 10:34:17

标签: c++

我正在编写此代码,用于使用循环将一个字符串内容存储到另一个字符串中。 (在下面的代码中)执行for循环后,字符串str1包含字符串str内容,但为什么str1.length()显示0(零)这是我无法弄清楚为什么?

string str;
str = "1234";
string str1;
for (int i = 0; i < str.length(); ++i) {
    str1[i] = str[i];
}
cout << str1.length() << endl;

1 个答案:

答案 0 :(得分:1)

您需要先调整新字符串str1的大小。这是因为您正在访问字符串之外的内存区域(在某种程度上,您正在查找字符串不在哪里)。 resize使字符串足够大以适合您的新字符串。

试试这个:

string str;
str = "1234";
string str1;
str1.resize(str.length());  // NEW LINE
for (int i = 0; i < str.length(); ++i) {
    str1[i] = str[i];
}
cout << str1.length() << endl;

但如果您只想复制字符串,可以使用str1 = str