c 中的 fread 读取的内容多于指示的内容

fread in c reads more than instructed

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

程序应该:

  1. 读取 .wav 文件

    • 解析 header
    • 读取数据
  2. 操纵数据

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

我被 fread() 函数卡住了一些奇怪的东西 - 当我尝试读取 4 字节到我定义的 char 数组(大小为 4 字节)时 - 我得到了单词 + 垃圾。

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

我尝试在两种情况下打印数组的内容(当我读取 2/3 字节时 v.s。当我读取 4 字节时)使用 while 循环直到 '\n' 而不是 printf(" %s") - 我得到了相同的结果(在第一种情况下写入字符串,在第二种情况下写入字符串 + 垃圾)。 此外,当我写回 header 并复制数据时 - 创建的文件不是同一首歌曲! 它确实打开了 - 所以 header 没问题,但数据是垃圾。 对于可能的原因,我会很高兴听到一些想法。我真的坚持下去,请帮助我! The problem - printscreen of the output

也许为您的 fmt_chunk_marker 预留 5 个字节。这将使您可以将 4 个字符的字符串表示为以 null 结尾的 C 字符串。最后一个字符读取后的字节应设置为空字符('[=11=]')。

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

fread returns 读取的字节数。之后数据不会被初始化,必须忽略。

如果你想把数据当作字符串,你必须自己用arr[count]=0 null 终止它。确保 arr 具有至少 count+1 容量以避免缓冲区溢出。