我有一个文件,其中包含一些数字,全部都在一行中。我想读取此文件并将此行放入字符串变量。
因此,由于它仅包含一行,因此getline()方法应该只工作一次

但是事实并非如此。它工作两次。我注意到,首先我的string_descriptor包含数字(所以没问题),但是在getline之后又换了一行,这一次它是空的,但是通过查看调试器,字符串包含了很多\ O \,就像10次一样。

\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\

c++ - C++ std::string为空,但充满了 '\0'-LMLPHP

这让我感到困扰,因为在进行一些处理之后,我的应用程序崩溃了。

所以我正在做以下事情:
 fs.open (desc.c_str (), std::ios::in);
 string line;
 if(!fs.is_open())
 {
      cout<<"\n Cannot open the text.txt file";
 }
 else
 {
   std::string string_descriptor;
   while (!fs.eof ())
   {

     getline( fs , line);
     if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())
     {

      string_descriptor = line;
      std::cout << "String descriptor : " << string_descriptor << std::endl;

     }
  }
}

那为什么会发生呢?特别是我该如何处理?我尝试通过执行以下操作来解决该问题,但仍然相同:
if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())

我检查了文件,到目前为止,文件末尾没有空格。

感谢您的帮助

最佳答案

为了避免循环的第二次迭代,请更改循环

   while (!fs.eof ())
   {

     getline( fs , line);
     //...

以下方式
   while ( getline( fs , line) )
   {
     //...

也是这种情况
if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())

看起来更简单
if ( line.find_first_not_of(' ') != std::string::npos )

关于c++ - C++ std::string为空,但充满了 '\0',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40806829/

10-10 22:20