0

我试图复制一个音乐文件(.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 但它已损坏。
它可能的解决方案是什么?

4

1 回答 1

0

getc()返回一个int,而不是一个char。它需要返回int,因为它将从流中读取的下一个字节返回为 0 到 255 之间的值,或者EOF返回通常为 -1 的值。由于有 257 个可能的输出,您需要能够区分 byte 255 和 sentinel EOF,但您的代码将两者混为一谈。因此,一旦您找到值为 255 的第一个字节,它就会错误地将文件截断。

如果您更改c为 isint而不是char,它应该可以正常工作。

于 2013-09-10T21:52:03.053 回答