将字符串的子字符串设置为向量的char元素时的EXC_BAD_ACCESS(C ++)

时间:2011-08-07 15:29:28

标签: c++ string vector exc-bad-access

我正在尝试制作矢量扩展标头。其中一个函数将向量设置为控制台输入(cin)。它使用以下代码:

vector<char> cveccin(){
    string cinval;
    cin>>cinval;
    vector<char> creader;
    for (int i=0; i<cinval.size(); i++) {
        creader[i]=cinval[i];
    }
    return creader;
}

我在测试中使用此功能,它给了我EXC_BAD_ACCESS。这里出了什么问题?

3 个答案:

答案 0 :(得分:3)

如果要将元素添加到std :: vector,请使用

vector<char> creader;
creader.push_back( var );

要使用数组表示法,您必须先设置std :: vector

的大小
vector<char> creader;
creader.resize ( 10 );
creader[0] = var1;
creader[1] = var2;

答案 1 :(得分:3)

问题是你的矢量大小为零,使用[]不会使它变大。

有一个单行,可以做你想要的。

vector<char> cveccin()
{
    string cinval;
    cin >> cinval;
    return vector<char>(cinval.begin(), cinval.end());
}

该代码创建正确大小的向量,将cinval字符串复制到它,并从函数返回它,所有这些都在一行中。不是C ++的奇妙!

答案 2 :(得分:1)

问题是你创建的creader-vector是空的。因为它不包含任何元素,所以您无法访问或索引任何元素。要解决此问题,您可以使用push_back方法而不是索引和分配。