如何解决使用push_back向向量添加非空字符串,向量内容为空为什么未将字符串添加到向量中?
#include <bits/stdc++.h>
#include <string>
using namespace std;
vector<string> func(string mag) {
vector<string> s1;
string temp1;
string temp2;
temp1[0] = 'a';
temp1[1] = 'b';
temp1[2] = 'c';
temp2 += "xyz";
s1.push_back(temp1);
s1.push_back(temp2);
return s1;
}
int main() {
string st;
vector<string> xyz;
xyz = func(st);
for (int a = 0; a < xyz.size(); a++)
cout << xyz[a] << ',';
}
以上代码的输出为,xyz,
,即使我期望abc,
也是如此。不会打印添加到向量中的字符串temp1
。
字符串temp1
是非空的,将其打印输出将得到输出abc
,但是将其推入向量s1
并打印出向量,字符串{{1} }不打印,而字符串temp1
(其中temp2
作为"xyz"
添加到字符串temp2+="xyz"
)被添加到向量中,并在打印向量的内容时被打印。
有人可以向我解释为什么向量内容中没有出现字符串temp1
吗?
解决方法
string temp1;
创建一个空字符串。访问其任何元素都是超出范围的访问,导致不确定的行为。如果要这样访问字符串的内容,请在使用前调整大小:
string temp1;
// VVVVVV
temp1.resize(3); // now it contains 3 elements
temp1[0]='a'; // set first element,ok
temp1[1]='b'; // set second element,ok
temp1[2]='c'; // set third element,ok
,
此代码:
string temp1;
temp1[0]='a'; // UB
调用未定义的行为。 temp1
的大小为0,因此不允许在第一个位置(索引0)建立索引(如注释中所指出的,有一个例外情况是写入字符'\0'
允许使用size
索引 。
请改为使用+=
或push_back
添加字符。或在将其编入索引之前将其大小调整为适当的大小。
您的代码中有一个错误:
string temp1;
temp1[0]='a'; // Oops - past the end of the string!
temp1[1]='b'; // Oops - past the end of the string!
temp1[2]='c'; // Oops - past the end of the string!
在所示的每一行中,您写的都超出了字符串的末尾,这导致未定义的行为。
如果要将temp1
设置为"abc"
,可以尝试
temp1 = "abc";
或
temp1 += 'a';
temp2 += 'b';
temp3 += 'c';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。