(对不起,如果我的保证金充满mystakes,我会尽我所能写一些可读的)嗨,我正在研究一个函数读取文件和存储每一行的第一行char是“:”并删除字符串中包含的每个短划线。每次找到这种类型的行时,push_back()都被用来将这一行存储在向量中。问题是,每次使用push_back()时,向量中的所有元素都取最后一个元素的值。我不明白为什么会发生。下面的代码:std :: vector做奇怪的事情
string listContent;
size_t dashPos;
vector<char*>cTagsList;
while(!SFHlist.eof())
{
getline(SFHlist,listContent);
if(listContent[0]==':')
{
listContent.erase(0,1);
dashPos = listContent.rfind("-",string::npos);
while(dashPos!=string::npos)
{
listContent.pop_back();
dashPos = listContent.rfind("-",string::npos);
}
char* c_listContent = (char*)listContent.c_str();
cTagsList.push_back(c_listContent);
}
}
我开始还以为是与该文件的末尾,但中止搜索过程之前达到这一点给出了相同的结果有问题。
首先,['而(!EOF())'是错误的。(http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)第二,将'c_str'的结果转换为'char *'非常糟糕。第三,只要修改字符串,该指针就无效,该字符串恰好在后面发生。使用'std :: string'的向量。无论如何,你并没有消除每一次冲刺,你会在第一次冲刺之后消除所有事情。使用'std :: remove'并将其与'erase'配对。 – chris
请不要*存储'c_str'的结果!相反,只需要使用char *只有在处理纯c的时候,你在C++ – crashmstr
char *,使用std :: string,你不必考虑太多 – blade