Wenn Sie mit einem DOS-System (z. B. Windows) arbeiten und die Datei nicht im Binärmodus geöffnet ist, werden Zeilenenden automatisch umgewandelt und jeder "Zeile" wird ein Byte hinzugefügt.
Also, spezifizieren Sie "wb"
als Modus und nicht nur "w"
wie @caf hervorhebt. Es wird keine Auswirkungen auf Unix-ähnliche Plattformen haben und wird auf anderen Plattformen das Richtige tun.
Zum Beispiel:
#include <stdio.h>
#define LF 0x0a
int main(void) {
char x[] = { LF, LF };
FILE *out = fopen("test", "w");
printf("%d", ftell(out));
fwrite(x, 1, sizeof(x), out);
printf("%d", ftell(out));
fclose(out);
return 0;
}
Mit VC++:
C:\\Temp> cl y.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
y.c
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
/out:y.exe
C:\\Temp> y.exe
04
Mit Cygwin gcc:
/cygdrive/c/Temp $ gcc y.c -o y.exe
/cygdrive/c/Temp $ ./y.exe
02