我无法从文件中读取数据,并将数据(文本)的选定部分连接到我自己的缓冲区中。
代码如下:
char buffer[1000];
char* allNewData = (char *)malloc(10000);
while (! myfile.eof() )
{
myfile.getline (buffer, 1000);
pch = strstr (buffer,"bla bla");
if(pch == NULL)
{
char* temp = buffer;
strcat(allNewData, temp);
strcat(allNewData, "\n");
}
else
{
strcat(allNewData, "here's bla bla");
strcat(allNewData, "\n");
}
}
cout<<allNewData<<endl;
当我运行程序时,allNewData
首先有一些垃圾文本,然后是正确/预期的结果,如下所示:
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii <-rubbish data
hello <- actual data
我需要摆脱这些垃圾数据,如何更改代码才能实现这一目标?
答案 0 :(得分:10)
在使用字符串连接函数之前,需要清除新分配的缓冲区。他们期望一个有效的字符串,能够找到结束,从而找到连接的起点。
使用:
allNewData[0] = '\0';
这使allNewData成为一个空字符串。在开始连接所有找到的数据之前,在循环之前执行此操作。
此外,当涉及到I / O和处理内存时,您的代码需要更好地处理各种“问题”:
答案 1 :(得分:1)
您可能会发现一些有用或无视的评论:
它们可能听起来像是微不足道的问题,但正确回答它们意味着你必须改变你的方法,我建议更纯粹的C ++方法:
ifstream f_in(<file>);
ostringstream s_out;
string line;
while(f_in.good())
{
getline(f_in, line); // global getline function in <string>
if (line.find("blah blah") != string::npos)
{
s_out << "here's blah blah" << endl;
}
else
{
s_out << line << endl;
}
}
这样您就不必担心上述任何问题......
答案 2 :(得分:0)
答案 3 :(得分:0)
再次......您必须检查您的IO操作是否失败,并且只有在IO操作失败后才应使用eof()
。