erzeugte Datei zu groß

Ich habe sicherheitshalber nochmal nachgesehen: Im Textmodus werden in der Tat Zeilenumbrüche umgewandelt.
Text mode (newline characters translated to and from carriage return – linefeed pairs).
Beim Binärmodus ist das nicht der Fall -- da werden alle Bytes direkt übernommen.
Wie Endurion schon sagte: Verwende "wb" und "rb" beim Öffnen der Datei. Das 'b' bedeutet "binär".

Code:
// öffnen zum schreiben
dat=fopen("data.dat","wb");

// öffnen zum lesen
dat=fopen("data.dat","rb");
 
Des Rätsels Lösung

Für die jenigen die es interessiert.
Die Datei muss natürlich auf jedem Fall binär verarbeitet werden ("wb" und "rb").
Das habt ihr ja schon richtig erkannt.
Aber die Frage ist warum ist das Verhalten unter Linux "gut" und unter Windows teilw. undefiniert?
Das liegt daran, daß Windows Zeilenumbrüche anders verarbeitet als UNIX und zwar als 10,13 (oder war es 13,10) also CRLF (Carrige Return, Line Feed, zu Deutsch, Wagenrücklauf und neue Zeile, das haben wir den Schreibmaschinen zu verdanken).
UNIX dagegen verwendet nur 10 (oder war es nur 13?)
Somit ergibt es eine unterschiedliche Bytegröße der Datei unter den Systemen.
So und da in dem Array diese 2 Zahlen durch Zufall irgendwo vorkommen, macht Linux und Windows einen Zeilenumbruch. Was zu der Mehranzahl an Bytes führt.

So ich hoffe das war ein wenig verständlich.

Gruß Homer
 
Zurück