我有这段代码:
while(fileStream>>help)
{
MyVector.push_back(help);
}
Run Code Online (Sandbox Code Playgroud)
...并且可以说文件"fileStream"中有1个句子:今天是晴天.现在当我这样做:
for(int i=0;i<MyVector.size();i++)
{
printf("%s\n", MyVector[i]);
}
Run Code Online (Sandbox Code Playgroud)
,重生是"日日活动日".而且,当然,它应该是那样的.变量声明如下:
char *help;
vector<char*> MyVector;
Run Code Online (Sandbox Code Playgroud)
编辑:我理解答案,谢谢...但是有没有办法存储文件中的文字vector<char*> MyVector(就像我想要的那样).这对我的其他计划来说会很棒.
当你这样做时fileStream>>help,它不会改变指针的值,它会覆盖指针所指向的字符串的内容.所以你一遍又一遍地将同一个指针推入向量.因此,向量中的所有指针都指向相同的字符串.因为写入该字符串的最后一件事是"day"这个词,所以当你打印出矢量的每个元素时,这就是你得到的.
使用矢量std::string代替:
string help;
vector<string> MyVector;
Run Code Online (Sandbox Code Playgroud)
如果,如你所说,你必须坚持vector<char*>,那么你将不得不为每个元素动态分配一个新的字符串.你不能安全地使用char*with operator>>,因为没有办法告诉它你的字符串实际有多少空间,所以我将std::string至少用于输入.
std::string help;
vector<char*> MyVector;
while (fileStream>>help) {
char * p = new char[help.size() + 1];
strcpy(p, help.c_str());
MyVector.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)
当然,当你完成向量时,你不能让它超出范围.您需要在循环中手动删除每个元素.但是,这仍然不是完全安全的,因为您的内存分配可能会抛出异常,导致您已分配的任何字符串并放入向量中泄漏.所以你应该把它们全部包装在try块中并准备好捕获std::bad_alloc.
这一切都很麻烦.如果你能解释为什么你认为你需要使用vector<char*>,我打赌有人可以告诉你为什么你不这样做.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |