Dateigröße stimmt nicht mit Anzahl der Aufrufe von putc überein
-
Ich habe folgenden Code:
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *file = fopen("Test.bin", "w"); int i; for (i = 0; i < 10240; i++) putc(rand() % 256, file); fclose(file); return 0; }
Ich würde jetzt eigentlich erwarten, dass die ausgegebene Datei "Test.bin" genau 10240 Bytes groß ist, weil ich eben so oft durch die Schleife laufe und jedesmal einen Character, also 1 Byte, in die Datei schreibe.
Dem ist aber nicht so. Stattdessen ist sie Datei 10276 Bytes groß. Selbst explizites Casten des Wertes nach
unsigned char
nützt nichts.Wenn ich statt
rand() % 256
einfach'a'
schreibe, dann haut wieder alles hin und die Datei hat die erwartete Größe.Was ist hier los? Was muss ich anders machen, damit es hin haut?
-
In den Modi ohne b wird auf einigen Systemen (u.a. Windows) eine Umsetzung von \n nach \r\n gemacht. Da werden dann zwei Zeichen ausgegeben.
Also statt "w" ein "wb" bei fopen. b wie binary. Dann stimmt auch die Datei-Extension
-
Jup, daran lag's. Vielen Dank.
-
Kann man Windows den Quatsch eigentlich auch irgendwie abgewöhnen? Global oder wenigstens per-Prozess? Was passiert eigentlich, wenn ich "\r\n" schreibe? Verunstaltet Windows das dann auch zu "\r\r\n"?
-
kamelpeter schrieb:
Kann man Windows den Quatsch eigentlich auch irgendwie abgewöhnen?
Ja, indem du die Datei binär öffnest, also mit
fopen("Test.bin", "wb");
Andernfalls darf das Betriebssystem beliebig formatieren.