在C中读取的内容多于指示内容

时间:2018-06-25 08:41:21

标签: c fread

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

程序应:

  1. 读取.wav文件

    • 解析标题
    • 读取数据
  2. 处理数据

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

arr[count]=0返回读取的字节数。此后,将不会初始化数据,而必须将其忽略。

如果要将数据视为字符串,则必须使用{{1}}自己将其终止为null。确保arr至少具有count + 1个容量,以避免缓冲区溢出。

答案 1 :(得分:0)

也许为您的fmt_chunk_marker保留5个字节。这样就可以将4个字符的字符串表示为以N结尾的C字符串。读取的最后一个字符之后的字节应设置为空字符('\0')。