我有一个包含一些数字的文件,全部在一行中。我想读这个文件并把这一行放到一个字符串变量中。 因为它只包含一条线,getline()
方法应该只能工作一次C++ std :: string是空的,但满''0'
但事实并非如此。它工作两次。我注意到,首先我的string_descriptor包含数字(所以它是okey),但在getline之后再占用另一行,这次它是空的,但通过查看调试器,字符串包含大量\ O \ 10次。
\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\
它困扰我,因为之后我做了一些处理,并因为我的应用程序crashs。
所以我在做什么是以下几点:
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())
我检查了我的文件,并没有在文件的结尾没有空间,所以据我所知。
谢谢您的帮助
你不应该使用循环'EOF()'看起来更简单:https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-错误 – Galik
你的文件是否包含nul字符? – stark
目前为止只有数字我知道 – lilouch