我正在尝试编写一个程序,为 .wav 文件添加效果。
该程序应该:
读取 .wav 文件
- 解析 header
- 读取数据
操纵数据
- 创建一个新的 .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/