inhalt einer datei in string
-
hui!
ich habe folgendes problem:
ich möchte den inhalt einer (txt-)datei in einen string speichern.
das klappt auch schon ganz gut, mit dem problem, dass jedesmal "╠╠╠╠╠test.txt" an den string drangehängt wird (test.txt = name der datei).
woran liegt das?
oder hättet ihr für den folgenden code eine bessere idee?X=1; while(X==1) { fread(&Speicher,sizeof(char),1,Datei); if(feof(Datei)) { X=0; } else { strcpy(&DString[I],&Speicher[0]); } I++; } printf("%s // strlen: %i",DString,strlen(DString));
danke schon im voraus
hase
-
ich gehe einfach mal davon aus, dass du in c++ programmierst:
in c++ benutzt man fread selten bzw garnicht.
heutzutage benutzt man die streams:string Data;//string ifstream Datei("datei.xxx");//Datei öffnen Datei>>Data;//Datei in string einlesen cout<<Data;//ausgabe string //ende
@Elise haha schneller^^
-
weil c statt c++, getilgt
-
@hase:
Falsches Forum, dein Beitrag gehört nach Ansi-C. (das programmierst du jedenfalls)MfG Eisflamme
-
ok, tut mir leid.
programmiere in C und kann keine c++-bibliotheken verwenden (schule).
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich denke dein Hauptproblem ist das du fread benutzt, nimm lieber fgets(),
ist bei Textdateien (vor allem bei deinem Problem) die bessere Wahl.
Das Problem mit fread ist das es dir keinen Null-Terminator in den Speicher schreibt. Im Grunde genommen ist es nur glück das du noch keinen Speicherzugriffsfehler hattest. Du liest immer nur ein Zeichen aus der Datei, ich weis alledrings nicht ob du das mit Absicht machst oder nicht.
Ausserdem ist strcpy auch net so das richtige. Langsam kommt mir dein Programm vor wie ein "wer findet die Fehler" Rätel.
so könnte man es machen:
FILE *fp = NULL; char dateistring[200000]; char zeile[250]; fp = fopen ("datei.txt", "r"); if(fp != NULL) { while(!(feof(fp)) { fgets(zeile, 250, fp); //wenn du newlines loswerden willst naechste Zeile auskomentieren //zeile[strlen(zeile)-1] = '\0'; strcat(dateistring, zeile); } printf("%s // strlen: %i",dateistring,strlen(dateistring)); flcose(fp); }
mfg.
-
danke erstmal, hab das jetzt übernommen.
doch so ganz toll isses jetzt auch net
bei folgendem dateiinhalt:
"
muuhaaaaaaaaaaaaaaab
"kommt folgendes raus:
"
*SEHRviele╠s*muuhaaaaaaaaaaaaaaab
"
*sehrviele╠s* steht dabei für so um die 1000 stück.
-
Hallo,
es fehlt nur eine wichtige Kleinigkeit, die Initialsierung des dateistring-Arrays (zumindest an der für das nachfolgende strcat wichtigen ersten Position):
[cpp]
char dateistring[200000] = {'\0'};
[/cpp]alles andere müßte passen...
MfG
-
Ja sorry, hab ich ganz vergessen, aber ich bin davon ausgegangen das der Poster die Daten schon selbst irgendwie initialisieren wird.
Ich mach das grundsätzlich mit einem memset, weil nicht immer vorauszusehen ist, was alles wie in den Speicher geschrieben wird. Nicht inialisierter Speicher ist IMHO eine der häufigsten Fehlerquellen in klassischem C. Deshalb generell Arrays, Strukturen, char-strings, immer memsetten, und die Pointer vor der Benutzung mit NULL initialisieren .
mfg.
-
@sg_
Das memset kannst du dir sparen, wenn du folgendes machst:
char text[100] = {0};
Diese kleine Definition initialisiert dir das komplette Array mit 0en.
Wenn du dich natürlich mit dem memset sicherer fühlst, ist es auch ok ;).
-
wow, geht doch glatt.
vielen dank für eure zahlreiche und schnelle hilfe.