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

将字符串的子字符串设置为向量的char元素时的EXC_BAD_访问(C++),c++,string,vector,exc-bad-access,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;

我正在尝试制作一个矢量扩展标题。其中一个函数设置控制台输入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_访问权限。这里出了什么问题?

如果要将元素添加到std::vector use

vector<char> creader;
creader.push_back( var );
要使用数组表示法,必须首先设置std::vector的大小

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

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

vector<char> creader;
creader.push_back( var );
要使用数组表示法,必须首先设置std::vector的大小

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

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

问题在于您创建的creader向量为空。因为它不包含任何元素,所以您无法访问或索引任何元素。例如,要解决此问题,您可以使用push_-back方法,而不是索引和赋值。

问题在于您的向量大小为零,而使用[]不会使其变得更大

有一个班轮可以满足你的要求

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

该代码创建大小正确的向量,将cinval字符串复制到该向量,并从函数返回该向量,所有操作都在一行中完成。不是C++了不起!p> 问题是向量的大小为零,使用[]不会使它变大

有一个班轮可以满足你的要求

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

该代码创建大小正确的向量,将cinval字符串复制到该向量,并从函数返回该向量,所有操作都在一行中完成。不是C++了不起!p> 谢谢你帮助我,我没有用那种方式,因为约翰的答案非常简单。谢谢你帮助我,我没有用那种方式,因为约翰的答案非常简单。谢谢!我使用你的答案是因为它最简单,但所有其他答案也都有效。谢谢!我使用你的答案是因为它最简单,但所有其他答案也都有效。谢谢你!你所有的答案都很好,我想会有用的,但我用了约翰的,因为它是最简单的。谢谢你!你所有的答案都很好,我想会有用的,但我用了约翰的答案,因为它是最简单的。