C 复制一个.mp3文件以创建另一个相同文件的文件操作
我试图复制一个音乐文件(.mp3)的内容以创建另一个音乐(.mp3)文件。我试过这个C 复制一个.mp3文件以创建另一个相同文件的文件操作,c,file-io,C,File Io,我试图复制一个音乐文件(.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((c
#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;
}
#包括
#包括
int main()
{
文件*a、*b;
字符c;
a=fopen(“linkinpark.mp3”,“rb”);
b=fopen(“linkinpark1.mp3”,“wb”);
而((ch=getc(a))!=EOF)
fprintf(b,“%c”,ch);
fclose(a);
fclose(b);
返回0;
}
可能是我犯了一些错误,比如使用char变量并将其写入二进制文件,并且创建了linkinpark1.mp3,但它已损坏。它可能的解决办法是什么
getc()
返回int
,而不是char
。它需要返回int
,因为它要么返回从流中读取的下一个字节作为0到255之间的值,要么返回值EOF
,通常为-1。由于有257个可能的输出,您需要能够区分字节255和sentinelEOF
,但您的代码将两者混为一谈。因此,一旦您使用值255点击第一个字节,它就会错误地缩短文件
如果您将
c
更改为int
而不是char
,它应该可以正常工作。我研究了更多信息,并查找了您的答案getc()、fgetc()和getchar()都返回无符号int(不是int)。所以这也会像unsigned int char一样工作;而((ch=getc(a))!=(unsigned)EOF)。@mrigendra:No、getc()
、fgetc()
、和getchar()
都返回纯int
,而不是unsigned int
。在tuboc索引中它说getc通过将读取的字符转换为不带符号扩展名的整数来返回该字符。@mrigendra:是的,它以int
的形式返回该字符。它返回的值范围为0-255,但仍然是int
。