2

私は C++ を学んでいて、本に質問があります。

Q: 文字列へのポインターのベクトルを定義するプログラムを作成してください。ベクトルを読み取り、各文字列とそれに対応するサイズを出力します。

コード:

vector<string*> v;
string str;
cout<<"Enter your string:"<<endl;

while(cin >> str)                            // input 
{
          string *ps=&str;
          v.push_back(ps);
}

vector<string*>::iterator iter=v.begin();
while( iter!=v.end())                         // output
   cout<< **iter++<<" "<<(**iter).size()<<endl;

「a sd fgh」と入力すると、出力は「a 1; sd 2; fgh 3」になると思います。しかし、出力は「fgh 3; fgh 3; fgh 3」です。誰がどこが間違っているのか知っていますか?

4

2 に答える 2

3

すべての文字列が同じ場所、つまりstr変数を指しているため、同じ出力が得られます。str次のように、バッファのデータを使用して新しい文字列を作成する必要があります。

std::string *ps = new string(str);

delete ptrその後、文字列が不要になったときに、関数の最後にある各文字列ポインタを呼び出して割り当てた文字列を削除することを忘れないでください。

于 2012-06-28T02:49:26.957 に答える
0

私はあなたに手がかりを与えます:それstd::string *ps = &strは非常に悪い考えです。各ポインタには独自のメモリが必要です。

于 2012-06-28T02:47:30.030 に答える