我有一个文件,其中包含一些数字,全部都在一行中。我想读取此文件并将此行放入字符串变量。
因此,由于它仅包含一行,因此getline()
方法应该只工作一次
但是事实并非如此。它工作两次。我注意到,首先我的string_descriptor包含数字(所以没问题),但是在getline之后又换了一行,这一次它是空的,但是通过查看调试器,字符串包含了很多\ O \,就像10次一样。
\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\
这让我感到困扰,因为在进行一些处理之后,我的应用程序崩溃了。
所以我正在做以下事情:
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/