我正在学习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”。谁知道哪里出错了?
答案 0 :(得分:3)
你得到相同的输出,因为你的所有字符串指向同一个地方 - 即你的str
变量。您应该使用缓冲区str
的数据创建新字符串,如下所示:
std::string *ps = new string(str);
执行此操作后,请不要忘记在不再需要字符串时,通过在函数末尾的每个字符串指针上调用delete ptr
来删除分配的字符串。
答案 1 :(得分:0)
我会给你一个线索:std::string *ps = &str
是一个非常糟糕的主意。每个指针都需要自己的内存。