下面的代碼,使用gcc -o copy在windows下使用MinGW-w64(i686-7.1.0-posix-dwarf-rt_v5-rev0)編譯的gcc.exe .exe用於複製文件時,copy.c創建垃圾文件;無論是複製很多還是太少的字節。在Linux下用gcc它工作正常(源和目標具有相同的MD5,文本文件,二進制文件,無所謂)爲什麼編譯的代碼在windows中創建損壞的文件在linux中工作正常
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE *fp = fopen(argv[1], "rb");
FILE *fpo = fopen(argv[2], "w");
int SIZE = 1000000;
char buffer[SIZE];
size_t bytes;
while (0 < (bytes = fread(buffer, 1, SIZE, fp)))
fwrite(buffer, 1, bytes, fpo);
fclose(fp);
fclose(fpo);
return(0);
}
那麼,爲什麼你使用*二進制模式*來讀取,但不寫?在Windows中,這種模式的確與**文本模式不同。 (因爲窗口上的行尾是'\ r \ n',所以在*文本模式下寫入時,在讀取時翻譯爲單個'\ n'並且翻譯回爲'\ r \ n') –
Minor:與更好的性能與'SIZE'一樣是65536的2次方。 – chux