当我输入 is.seekg(0) 时,它会将我带到流的开头。但是,当我输入 is.seekg(ios::end) 时,它会将我带到第二个字符。为什么会这样。我认为我对此的误解源于对流的工作原理缺乏基本的了解。我认为当您提供常量 ios::end 时,它会将您带到该流的末尾。但是,它似乎让你向前移动了一个角色。
cin.seekg(0, ios::end);
int length = cin.tellg();
cout << length << endl;
cin.seekg(0);
cout << cin.tellg();
当我输入<包含“123456789”的文件时
输出为10 0
现在如果我这样做:
cin.seekg(ios::end);
int length = cin.tellg();
cout << length << endl;
输出为2
这是为什么呢?
最佳答案
这段代码只是偶然运行
cin.seekg(ios::end);
int length = cin.tellg();
cout << length << endl;
值 end
来自 enum seekdir {beg, cur, end};
,所以 ios::end
恰好是可转换为值为 2
的整数。
不幸的是,seekg
的一个重载的参数是一个整数,因此调用变成了cin.seekg(2)
。虽然在技术上有效的代码,但这绝对不是您想要的。
关于c++ - Istream seekg() 偏移量和 ios::end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714973/