【问题标题】:Reading empty file in C++ returns 255, 0 expected在 C++ 中读取空文件返回 255,预期为 0
【发布时间】:2022-12-09 17:26:06
【问题描述】:

当我运行我的代码来读取文件时,它以各种方式工作。我在文件中找到的任何 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;
}

【问题讨论】:

  • 你为什么期望get返回 0?它返回更宽的整数类型,以便能够返回“无效”值。

标签: c++ readfile eof


【解决方案1】:

返回 EOF 的可能性是 istream::get 不返回 char 而是一个整数的主要原因。

如果 EOF 将返回为 0,您将无法将其与非 EOF 0 区分开来。

EOF 的值是流的字符特征的一部分。你可以在这里找到它std::char_traits<CharT>

由于它的所有模板都没有在文档中引用特定的CharT,因此浏览起来可能很麻烦。这个网站作为一个非常方便的概述,还列出了char_traits<char>https://en.cppreference.com/w/cpp/string/char_traits 的最重要的功能。

最后但并非最不重要的一点是,EOF 被指定为负数,因为一旦环绕,您就无法分辨“好”值和 EOF 之间的区别。因此,您不应使用uint8_t 作为get 的返回值。使用适当的整数类型,只有在检查 EOF 后才能将其存储为目标类型。

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2020-05-20
    相关资源
    最近更新 更多