C ++ std :: string为空,但已经满了' \ 0'

时间:2016-11-25 14:07:35

标签: c++ string crash

我有一个包含一些数字的文件,全部在一行中。我想读取此文件并将此行放入字符串变量。 因为它只包含一行,getline()方法只能运行一次

但事实并非如此。它工作两次。我注意到我的string_descriptor首先包含了这个数字(所以它是okey)但是在getline之后需要另一行,这次它是空的但是通过查看调试器,字符串包含很多\ O \ like 10次。

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

enter image description here

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

所以我正在做的是:

 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())

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

   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 )