Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 复制一个.mp3文件以创建另一个相同文件的文件操作_C_File Io - Fatal编程技术网

C 复制一个.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

我试图复制一个音乐文件(.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;
     }  
#包括
#包括
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和sentinel
EOF
,但您的代码将两者混为一谈。因此,一旦您使用值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