我尝试了一些使用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/

10-13 08:29