printf Ausgabeproblem
-
Vorab: es war schwer, einen Titel zu finden
pFile = fopen (filename,"r"); if(pFile!=NULL) { char * mystring; fgets (mystring , EOF , pFile); puts (mystring); printf("%b", mystring); //%s erzeugt selbes Ergebnis....warum? fclose (pFile); }
Ich will den Inhalt eines Files einlesen und binär ausgeben. Scheint, als könnte ich mit %b aber meinen String nicht binär ausgeben...geht das Überhaupt so, wie ich es vorhatte?
Kompilieren tut es, aber das Resultat ist seltsam:
U��WVS�0�
-
edit: die Textdatei darf Zeichen, Zahlen, Klammern, "§%$§&)=*+, solche Dinge enthalten...
ich dachte mit printf und dem richtigen % geht das automatisch
-
So evtl.?
pFile = fopen (filename,"r"); if(pFile!=NULL) { //char * mystring; ein Zeiger ins nichts -> nicht gut char mystring[100]; //ein char Array fuer 100 chars fgets (mystring , 100 , pFile); //max 100 chars lesen puts (mystring); printf("%s", mystring); fclose (pFile); }
-
ist doch ein blödsinn!
ich will das file ja komplett auslesen, da nützen mir 100 zeichen nichts, können u.U. ja Millionen von Zeichen sein.
Ich denke auch nicht, dass das Problem beim Einlesen ist, sondern beim "umwandeln/ausgeben"...weiß aber nicht genau.
mfg holdi
-
Das ist kein Blödsinn.
Du hast einen wilden Zeiger der irgendwo hin zeigt und semmelst da Daten rein. Das ist astreines, undefiniertes Verhalten.
Wenn Du sehr viel einlesen willst, solltest Du erstmal die Größe ermitteln, und dann mit malloc/calloc entsprechend viel Speicher anfordern.
Die Größe kannst Du z.B. mit fseek ermitteln.
-
was allerdings nicht mein problem wegen der binären ausgabe löst...%b hab ich ja angegeben, trotzdem kommen keine Nullen/Einsen raus...
-
holdi schrieb:
was allerdings nicht mein problem wegen der binären ausgabe löst...%b hab ich ja angegeben, trotzdem kommen keine Nullen/Einsen raus...
Der Standard kennt kein %b.
-
was genau soll das puts?
puts(char*)
und
printf("%s", char*)
bewirken doch das selbe.Und wie Tachyon schon sagt:
Dein Hauptproblem ist die falsche Verwendung von fgets.
Bevor du die nicht korrigiert hast, bringt es nix über anderes unerwartetes Verhalten nachzudenken.