我尝试了一些使用C++的文件读取策略,然后遇到了这个问题。
ifstream ifsw1("c:\\trys\\str3.txt");
char ifsw1w[3];
do {
ifsw1 >> ifsw1w;
if (ifsw1.eof())
break;
cout << ifsw1w << flush << endl;
} while (1);
ifsw1.close();
该文件的内容分别为
第一第一第一第二
第二第一第二
当我看到输出时,将其打印为
第一优先
第一秒
第二优先
我期望输出是这样的:
冷杉
stf
irs
tfi
.....
此外,我看到还没有打印“secondsecond”。我想最后一次读取已达到eof,并且cout可能尚未执行。但是第一个行为是无法理解的。
最佳答案
提取运算符对ifsw1w变量的大小没有概念,并且(默认情况下)将提取字符,直到它达到空格,null或eof。这些可能存储在ifsw1w变量之后的内存位置中,如果定义了其他变量,这将导致错误。
要获得所需的行为,您应该可以使用
ifsw1.width(3);
限制要提取的字符数。
关于c++ - 在istream上读取固定数量的带有<<的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4981522/