c++ - Istream seekg() 偏移量和 ios::end

标签 c++ stream

当我输入 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/

相关文章:

c# - 从 ffmpeg 标准输出的单个流中获取多个图像

java - 写入 Java 进程的 InputStream

ffmpeg - 将 Chromium(或任何 Internet 浏览器)捕获到传输流中

C++读取文件时未处理的异常

c++ - 理解 STL 中的仿函数

C++ 在 try block 中创建对象,然后将它们存储在 std::array 中

python - 解析Python中分块的内容类型的响应

c++ - 重载 istream 运算符>> c++

c++ - 非类型模板参数的类型转换无效

c++ - QOpenGLWidget绘制三角形