当我打印时,为什么我读到的所有字符串都相等?

时间:2012-06-28 02:43:38

标签: c++

我正在学习C ++,书中有一个问题。

  

问:编写一个定义字符串指针向量的程序。阅读矢量,   打印每个字符串及其相应的大小。

代码:

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;

当我输入“sd fgh”时,我预计输出为“1; sd 2; fgh 3”;但输出是“fgh 3; fgh 3; fgh 3”。谁知道哪里出错了?

2 个答案:

答案 0 :(得分:3)

你得到相同的输出,因为你的所有字符串指向同一个地方 - 即你的str变量。您应该使用缓冲区str的数据创建新字符串,如下所示:

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

执行此操作后,请不要忘记在不再需要字符串时,通过在函数末尾的每个字符串指针上调用delete ptr来删除分配的字符串。

答案 1 :(得分:0)

我会给你一个线索:std::string *ps = &str是一个非常糟糕的主意。每个指针都需要自己的内存。