2011-08-07 10 views
1

ベクトル拡張ヘッダーを作成しようとしています。関数の1つは、ベクトルをコンソール入力(cin)に設定します。私はテストでこの機能を使用し、それは私にEXC_BAD_ACCESSを与えるEXC_BAD_ACCESS文字列の部分文字列をベクトルのchar要素に設定するとき(C++)

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

:それは、次のコードを使用しています。ここで何がうまくいかないの?あなたが最初のstdのサイズを設定する必要があります配列表記を使用するには

答えて

3

問題は、ベクトルのサイズがゼロで、[]を使用してもベクトルがそれ以上大きくならないということです。

あなたが望むことを実行する1つのライナーがあります。

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

このコードは、適切なサイズのベクトルを作成し、それにコピーcinval文字列を、すべて一列に、関数からそれを返します。 C++は素晴らしいことではありません!

+0

ありがとう!私はあなたの答えを使いました。なぜなら、それは最も単純だったからです。 – Gabe

3

あなたははstdする要素を追加したい場合は::ベクトル使用

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

::ベクトル

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

ありがとうございます!あなたの答えはすべて素晴らしく、働いていたはずです(私は思う)が、それは最も簡単だったのでジョンのものを使いました。 – Gabe

1

問題あなたが作成したクリーダベクトルが空であるということです。要素を保持していないため、アクセスも索引もできません。この問題を解決するには、たとえば、索引付けおよび割当ての代わりにpush_backメソッドを使用できます。

+0

ジョンの答えは本当にシンプルだったので、助けてくれてありがとう、私はその方法を使わなかった。 – Gabe

関連する問題