gpt4 book ai didi

C++ ifstream::read() - 破坏 ifstream 获取指针?

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:51 26 4
gpt4 key购买 nike

这里有没有人知道 C++ ifstream 的 get 指针在调用 read() 后可能会损坏的方法?我看到了一些我无法解释的真正奇怪的行为。例如(说明性代码,而不是我实际运行的代码):

int main()
{
// datafile.bin is a 2MB binary file...
std::ifstream ifs( "datafile.bin", ios::binary );
ifs.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );

int data[100];

std::istream::pos_type current_pos = ifs.tellg();
// current_pos = 0, as you'd expect...

ifs.read( reinterpret_cast<char*>(data), 100 * sizeof(int) );
// throws no exception, so no error bits set...

std::streamsize bytes_read = ifs.gcount();
// gives 400, as you'd expect...

current_pos = ifs.tellg();
// current_pos = 0x1e1a or something similarly daft

return 0;
}

我的示例显示了一个数组读取,但即使在读取内置类型的单个值时也会发生这种情况;读取前的 get 指针是正确的,gcount() 调用报告了正确的读取字节数,但之后 get 指针就完全乱七八糟了。每次 read() 调用都不会发生这种情况 - 有时我会在一个塞满之前完成一堆。 get 指针可能有什么问题?我在做一些非常愚蠢的事情吗?

非常感谢任何帮助...

西蒙

最佳答案

pos_type 不是整数类型而是类,我不会尝试解释它的表示形式。它可以隐式转换为整数类型,但如果您在调试器中查看它,您将看到内部表示。

关于C++ ifstream::read() - 破坏 ifstream 获取指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com