在C++中阅读空文件返回255,应为0

gc0ot86w  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(131)

当我运行我的代码读取文件时,它可以在任何方面工作。我在文件中找到的任何ASCII代码,都可以使用我的函数打印出来。但是当它到达EOF时,我希望它返回0,但它返回了255。为什么会发生这种情况,我如何修复它。
我的代码段:

uint8_t FileDevice::read () {
    ifile.open(this->fileName);
    if (!ifile) ifile.open(this->fileName.c_str(), ifstream::app);
    ifile.seekg(this->position);
    uint8_t character;
    character = ifile.get();
    ifile.close();
    this->position++;
    printf("%d\n", character);
    return character;
}
o7jaxewo

o7jaxewo1#

返回EOF的可能性是istream::get不返回char而是返回更广泛的整数类型的主要原因。
如果EOF返回为0,则无法将其与非EOF 0区分开。
EOF的值是流的char特性的一部分,可以在std::char_traits<CharT>中找到它。
由于它的所有模板和没有具体的CharT在文档中提到,它可以是繁琐的涉水通过。这个网站作为一个非常方便的概述,也列出了char_traits<char>的最重要的功能:https://en.cppreference.com/w/cpp/string/char_traits .
最后,EOF被指定为负数,并且一旦被环绕,您就无法区分“好”值和EOF之间的区别。因此,您不应该使用uint8_t作为get的返回值。使用适当的整数类型,并且只有在检查EOF之后,您才可以将其存储为目标类型。

相关问题