【问题标题】:To many char read by fread对于 fread 读取的许多字符
【发布时间】:2020-09-14 03:06:23
【问题描述】:

我正在尝试以二进制模式打开文件并将内容写入 C++ 中的缓冲区。 我为此使用fread。然而,出了点问题。 我的代码是:

FILE * in = fopen("in", "rb");
_in = new unsigned char [length_in];
fread(_in, sizeof(char), length_in, in);

调试时我可以看到_in = unsigned char * "Asdfghjkl\x1f \x10"

重建程序时,\x1f \x10部分随机变化或消失。

我所期待的总是_in = unsigned char * "Asdfghjkl"

当用9 替换length_in 时,我仍然得到类似"Asdfghjkl\x1f \x10" 的东西。

我错过了什么。我正在使用 Mac 和 Xcode。

【问题讨论】:

  • 您正在读取字节,而不是字符串。所以零终结符不见了。如果你想这样做,不要忽略 fread() 的返回值。
  • 不要忽略fread的返回值。它包含重要信息,例如实际读取了多少数据。

标签: c++ fstream ofstream


【解决方案1】:

您的数组是在未初始化的情况下创建的,因此这些是预先存储在内存中的垃圾值。像这样将其初始化为零:

_in = new unsigned char [length_in]();

同样fread 返回读取的字节数。如果您将其视为字符串,请确保结果以 null 结尾。

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多