Programmabsturz bei Pointern

Ok, ich versuche es nochmals zu erklären ;)

Nehmen wir mal an, dass schwingkreis->r 100 ist. Ausserdem nehmen wir jetzt an, dass r vom Typ unsigned int ist.

Dann ist unsere Variable im Speicher hexadezimal folgendermassen:
00 00 00 64

Wenn wir das nun mit fwrite in eine Datei schreiben, dann sieht diese Datei folgendermassen aus:
d

Warum? In die Datei werden 4 bytes geschrieben. Die ersten 3 Bytes sind 0 und 0 steht nicht für ein Zeichen, dass sich darstellen lässt. Ergo sehen wir diese auch nicht im Editor. Das letzte Byte ist 64 (hexa). 64 hexadezimal ist der Code für 'd'.

Deshalb steht in der Datei nicht 100, sondern d.

Möchten wir in unsere Datei 100 schreiben, so müssen wir fprintf verwenden.
 
Ok gut das hab ich verstanden, dass ich jetzt ein fprintf benutzen sollte. Allerdings wäre das bei mir folgende Zeile:
C++:
 fprintf(out, "%s", schwingkreis);

Du hattest ja das hier geschrieben: fprintf(pFile, "%u", sb.val);
%u steht doch für Adressen (wenn ich mich recht entsinne). Da ich ja alles im struct als double Werte habe, aber die Ausgabe ja noch mitschreiben will, frage ich mich welchen platzhalter ich da verwenden sollte?
 
%u steht für unsigned (int/long/char/short). %p steht für Adressen. %s steht für strings (char*), %c für char, und mit %f gibst du float und double aus.
 
@Cromon - Vielen Dank für deine Hilfe! Kann jetzt alles rausch schreiben.

Schönen Gruß
Manda
 
Grundsätzlich tust du ja das selbe wie bei
Code:
fprintf(out, "\nWiderstandswert          : %.2lf  Ohm", ptr.r);    
fprintf(out, "\nInduktionswert           : %lf H", ptr.l);    
fprintf(out, "\nKapazitaetswert          : %lf F", ptr.c);    
fprintf(out, "\nFrequenzintervall - untere Grenze: %.2lf   Hz", ptr.fmin);    
fprintf(out, "\nFrequenzintervall - obere  Grenze: %.2lf  Hz", ptr.fmax);    
fprintf(out, "\nAnzahl der Schritte      : %d", ptr.schritte);

Aber diesmal nicht mit out, sondern in deine Datei. (wobei du ja die glaub nacher out zuweist)
 
Zurück