Datei im "Ascii-Modus" öffnen

lindin

Erfahrenes Mitglied
Hallo, ennt irgendjemand ein Programm, mit dem ich eine Datei (text) so öffnen kann, daß alles Zeichen als Ascii-Codes dargestellt werden?
 
Also das war ein guter Tipp, hat mir gezeigt, daß ich sowas nicht brauche, da mein Problem woanders liegt! ;-)

Es geht darum, daß ich eine Textdatei auslese und den Text dann in einem Fenster ausgebe! Nun ist am Schluß immer ien "Zeichensalat" aus lauter ííí und ýýý immer so 10 Zeichen oder so, und auch nicht immer gleich!
Und wenn ich die Datei mit dem Hex-Editor öffne, sehe ich diese Zeichen nicht!

Der Text wird vorher mit fprintf in die Datei geschrieben, kann mir da jmd helfen?
 
Zuletzt bearbeitet:
Weil der Salat nicht in der Datei steht sondern in deinem String, in den du einliest. Der scheint nicht ordentlich 0 terminiert zu sein. Fülle die char* Variable, in die du einliest mal vorher mit dem Zeichen 0, also memset(variable,0,länge des strings);
Dann dürfte der Zeichensalat verschwinden. (Achtung! Auf die Größe des reservierten Speichers achten!)
 
Hm, jetzt stürzt mein Prog ab, ich habe jetzt einfach beim allokiern +1 angegebn, ist das falsch?
 
Aber memset setz doch die ersten x Zeichen so, wie man angibt, wenn muß ich doch das letzte Zeichen so setzen!
 
Wenn du alle Zeichen setzt, setzt du auch das letzte Zeichen :). Ich meine das so:
Code:
char buffer[100];
memset(&buffer[0],0,100);

Oder halt dynamisch. Poste doch mal den kritischen Abschnitt.
 
Ja, so hab ich das auch gemacht, aber das Prog stürtzt trotzdem ab!
Vielleicht lese ich das falsch ein, ich poste Dir das mal eben:
Code:
fp=fopen(datei,"rb");
fseek(fp,0,SEEK_END);
lSize=ftell(fp);
 rewind(fp);
buffer=(char*)malloc(lSize);
memset(&buffer[0],0,strlen(buffer));
fread(buffer,1,strlen(buffer),fp);
 
Du hast es überhaupt nicht so gemacht!

Code:
buffer=(char*)malloc(lSize);
memset(&buffer[0],0,strlen(buffer));

DAS kann dir nur der Teufel gesagt haben! *gg* Nein im ernst, guck mal da beißt sich doch die Katze in den Schwanz. strlen parst buffer solange bis es ein \0 findet und gibt die Position zurück. Mit der Länge von buffer hat das nix zu tun, weil ja noch irgendwas in buffer steht und die 0 auch erst das millionste Zeichen sein kann! So is richtig:

Code:
buffer=(char*)malloc(lSize);
memset(&buffer[0],0,lSize);

Einfach die gleiche Variable benutzen (nix berechnen lassen) und du bist auf der sicheren Seite! (Gilt auch später, wenn du buffer parsen solltest, obwohl du durch die Nullen dann mehr Glück haben wirst mit strlen.)

Ach ja, das gleiche bei fread. strlen macht da auch noch keinen Sinn (da werden dann 0 Zeichen eingelesen, weil durch memset schließlich schon das erste Byte 0 ist und strlen dann schon abbricht).
 
Zurück