提问人:Michael 提问时间:6/25/2018 最后编辑:StoogyMichael 更新时间:5/3/2020 访问量:1152
C 语言中的 Fread 读数超过指示值
fread in c reads more than instructed
问:
我正在尝试编写一个程序,该程序将向 .wav 文件添加效果。
该计划应:
读取 .wav 文件
- 解析标头
- 读取数据
操作数据
- 创建一个新的 .wav 文件 -
- 编写标题
- 写入新数据
我被困在一些奇怪的功能上 -
当我尝试将 4 个字节读取到我定义的 char 数组(大小为 4 字节)时 - 我得到单词 + 垃圾。fread()
如果我尝试以相同的方式读取 2 或 3 个字节 - 一切正常。
在这两种情况下,我都尝试打印数组的内容(当我读取 2/3 字节时,当我读取 4 字节时)使用 while 循环直到“\n”而不是 printf(“%s”) - 我得到了相同的结果(在第一种情况下写字符串,在第二种情况下写字符串 + 垃圾)。 另外,我写回标题并复制数据 - 创建的文件不是同一首歌! 它确实打开了 - 所以标头很好,但数据是垃圾。 我很高兴听到一些可能的原因。我真的被困住了,请帮帮我!问题 - 输出的打印屏幕
答:
1赞
jspcal
6/25/2018
#1
也许为您的 .这将允许您将 4 个字符的字符串表示为以 null 结尾的 C 字符串。读取最后一个字符后的字节应设置为空字符 ()。fmt_chunk_marker
'\0'
5赞
Shloim
6/25/2018
#2
fread
不用于读取字符串。它读取二进制数据。这意味着数据不会被 null 终止,也不会有任何其他终止。
fread
返回读取字节数。在此之后,数据将不会初始化,必须忽略。
如果要将数据视为字符串,则必须使用 null 自行终止它。确保其容量最小,以避免缓冲区溢出。arr[count]=0
arr
count+1
上一个:如何按位置从文件中删除符号
评论
\0
.wav