我正在尝试从一个文件的开头复制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/

10-13 05:25