我正在尝试从一个文件的开头复制5个字节,然后将其放入另一个文件的开头。但是,它们无法准确复制。我认为问题出在fputc和fgetc中,但不确定...
bmpFile = fopen("frog.bmp", "rb");
encodedFile = fopen("encodedFrog.bmp", "rwb");
for (int i=0; i<5; i++){
fputc(fgetc(bmpFile), encodedFile); //copy that byte, unchanged into the output
}
//close and open both files, read the first 5bytes back;
fclose(bmpFile);
fclose(encodedFile);
bmpFile = fopen("frog.bmp", "rb");
encodedFile = fopen("encodedFrog.bmp", "rwb");
for (int i=0; i<5; i++){
unsigned int actual = fgetc(bmpFile);
unsigned int value = fgetc(encodedFile);
printf("actual: %d \tvalue: %d\n", actual, value);
}
结果是:
actual: 66 value: 66
actual: 77 value: 77
actual: 54 value: 134
actual: 115 value: 68
actual: 20 value: 17
谢谢
最佳答案
"rwb"
不是有效的fopen
模式。您可能要使用
fopen("encodedFrog.bmp", "r+b");
这将打开一个现有文件以二进制模式输入和输出。如果该文件不存在,则应使用
"w+b"
。fopen("encodedFrog.bmp", "w+b");
这将打开一个新文件,以二进制模式输入和输出。
另外,正如@amdixon所提到的,您应该使用
rewind
,而不是重新打开文件,它将流的位置重置为开头。关于c - C中的fgetc和fputc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33182506/