c 中的 fread 读取的内容多于指示的内容
fread in c reads more than instructed
我正在尝试编写一个将效果添加到 .wav 文件的程序。
程序应该:
读取 .wav 文件
- 解析 header
- 读取数据
操纵数据
- 创建一个新的 .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
容量以避免缓冲区溢出。
我正在尝试编写一个将效果添加到 .wav 文件的程序。
程序应该:
读取 .wav 文件
- 解析 header
- 读取数据
操纵数据
- 创建一个新的 .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
容量以避免缓冲区溢出。