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

标签 c fread

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

该程序应该:

  1. 读取 .wav 文件

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

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

我被 fread() 函数困在一些奇怪的事情上 - 当我尝试读取 4 个字节到我定义的 char 数组(大小为 4 个字节)时 - 我得到了单词 + 垃圾。

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

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

最佳答案

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

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

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

关于c - c 中的 fread 读取的内容超出了指示的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51019373/

相关文章:

c - 在 fread() 之后访问内存缓冲区

c++ - 为什么for循环中的 "++i"和 "i++"有区别?

c - 防止不良和必要的递归

c - 编写我的 Server.c 套接字维护多线程的问题

c - return 从指针生成整数而不进行强制转换 [-Wint-conversion] return candidate

c - 读取字符串中的二进制文件显示奇怪的输出

c - fread函数只读大约700kb

c - read(2) 是 C89 规范的一部分吗?

c - fread 读取文件失败

java - 像java short []一样在c中创建short int数组