读取文件时出现乱码问题

Ram*_*ous 0 c++ ignore skip stream

我无法从文件中读取数据,并将数据(文本)的选定部分连接到我自己的缓冲区中.

代码如下:

 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;
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,allNewData首先有一些垃圾文本,然后是正确/预期的结果,如下所示:

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii <-rubbish data
hello  <- actual data
Run Code Online (Sandbox Code Playgroud)

我需要摆脱这些垃圾数据,如何更改代码来实现这一目标?

unw*_*ind 10

在使用字符串连接函数之前,需要清除新分配的缓冲区.他们期望一个有效的字符串,能够找到结束,从而找到连接的起点.

使用:

allNewData[0] = '\0';
Run Code Online (Sandbox Code Playgroud)

这使allNewData成为一个空字符串.在开始连接所有找到的数据之前,在循环之前执行此操作.

此外,当涉及到I/O和处理内存时,您的代码需要更好地处理各种"问题":

  • 在进行读取访问之前,请勿检查EOF.
  • 在使用读取结果之前,请检查读取是否成功.
  • 存储数据时,请确保不要超过缓冲区的容量.