0

我正在从文件中读取并将数组(指针)的前面传递回我的主函数。我遇到的问题是它没有复制单词之间的空格。例如Hello Hello出来为HelloHello.

我开始使用getLine,然后遇到了文件大小的问题。我将其设置为 500,因为没有文件会大于 500,但是大多数文件将低于 500,我正在尝试获取文件的确切大小。

这是我的代码:

char infile()
{
   const int SIZE=500;
   char input[SIZE];
   char fromFile; 
   int i=0;

   ifstream readFile;
   readFile .open("text.txt");
   while(readFile>>fromFile)
   {
     input[i]=fromFile;
     i++;
   }
   cout<<endl;
   returnArray=new char[i];//memory leak need to solve later
   for(int j=0;j<i;j++)
   {
      returnArray[j]=input[j];
      cout<<returnArray[j];
    }
    cout<<endl;
  }
  return returnArray[0];
}
4

3 回答 3

5

根据您的文件格式,您可能想要使用ifstream::read()ifstream::getline()代替。

operator >>将尝试“标记化”或“解析”正在读取的数据流,使用空格作为标记之间的分隔符。您有兴趣从具有完整空白的文件中获取原始数据,因此您应该避免使用它。如果您想一次读取一行中的数据,使用换行符作为分隔符,您应该使用getline(). 否则使用read().

于 2012-04-14T22:08:39.100 回答
3

使用std::string,std::vector并且std::getline你仍然可以返回一个char. 这将解决您的内存泄漏和跳过空白问题。

例子:

char infile()
{
  std::ifstream readFile("text.txt");
  std::vector<std::string> v;
  std::string line;
  while(std::getline(readFile, line))
  {
    v.push_back(line);
  }                                      
  for(auto& s : v)
  {
      std::cout << s << std::endl;
  }
   return (v[0])[0];
}
于 2012-04-14T22:18:39.747 回答
0

您要求它在分隔有空格的位置时读取。

您可以使用 getline() 来保留空格。

于 2012-04-14T22:09:58.613 回答