c 中的 fread 读取的内容超出了指示的内容

Mic*_*ael -3 c fread

我正在尝试编写一个程序,为 .wav 文件添加效果。

该计划应该:

  1. 读取 .wav 文件

    • 解析标头
    • 读取数据
  2. 操纵数据

  3. 创建一个新的 .wav 文件 -
    • 写标题
    • 写入新数据

我陷入了一些奇怪的函数问题fread()- 当我试图读取 4 个字节到我定义的字符数组(大小为 4 个字节)时 - 我得到了单词 + 垃圾。

如果我尝试以相同的方式读取 2 或 3 个字节 - 一切正常。

我尝试在两种情况下(当我读取 2/3 字节时与当我读取 4 字节时)用 while 循环打印数组的内容,直到 '\n' 而不是 printf("%s") - 我得到了相同的结果(第一种情况写字符串,第二种情况写字符串+垃圾)。另外,我写回标题并复制数据 - 创建的文件不是同一首歌!它确实打开了 - 所以标头很好,但数据是垃圾。我会很高兴听到一些关于可能原因的想法。我真的很困惑,请帮助我! 问题 - 输出的打印屏幕

Shl*_*oim 5

fread不是为了读取字符串。它读取二进制数据。这意味着数据不会以空终止,也不会有任何其他终止。

fread返回读取的字节数。此后,数据将不会被初始化,并且必须被忽略。

如果要将数据视为字符串,则必须使用 null 自行终止它arr[count]=0。确保arr具有最小count+1容量以避免缓冲区溢出。