我试图复制一个音乐文件(.mp3)的内容以创建另一个音乐(.mp3)文件。我试过这个,
#include<stdio.h>
#include<conio.h>
int main()
{
FILE *a, *b;
char c;
a = fopen("linkinpark.mp3","rb");
b = fopen("linkinpark1.mp3","wb");
while((ch = getc(a)) != EOF)
fprintf(b,"%c",ch);
fclose(a);
fclose(b);
return 0;
}
可能是我犯了一些错误,比如使用char变量并将其写入二进制文件中,并且还创建了linkinpark1.mp3但它已损坏。
它可能的解决方案是什么?
答案 0 :(得分:0)
getc()
会返回int
,而不是char
。它需要返回int
,因为它返回从流中读取的下一个字节作为0到255之间的值,或值EOF
,通常为-1。由于有257个可能的输出,您需要能够区分字节255和标记EOF
,但您的代码将两者混为一谈。因此,一旦你点击值为255的第一个字节,就会错误地将文件缩短。
如果您将c
更改为int
而非char
,则应该可以正常使用。