Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

C++: Pfade aus Textdaei auslesen

Yves3 / 6 Antworten / Flachansicht Nickles

hallo

ich möchte die pfade für meine texturen aus einer textdaei auslesen.

wenn ich das so mache, funktioniert es:

fgets(Test,25,pDatei); // bei 24 zeichen langem pfad

D3DXLoadSurfaceFromFile(VecTileSurface[0], 0,0,Test,0,D3DX_DEFAULT,0,0);

dummerweise ist der pfad nicht immer gleich lang und wenn ich fogendes schreibe funktioniert es nicht:

fgets(Test,100,pDatei);

hab es auch schon mit tricks probiert:

fgets(Test,100,pDatei);
strncpy(Buffer,Text,sizeof(Text));

D3DXLoadSurfaceFromFile(VecTileSurface[0], 0,0,Buffer,0,D3DX_DEFAULT,0,0);

hat leider auch nicht funktioniert :-(
komischerweise wird der pfad immer richtig dargestellt, wenn ich ihn mit einer messagebox ausgebe.

ach ja meine textdatei:

4
1
3 3 3 3 3 3 3 3
1 1 0 0 0 0 1 2
1 1 0 2 0 0 1 2
1 3 0 0 3 0 1 2
0 1 0 0 0 0 1 2
1 1 0 1 0 0 1 2
..\\\\media\\\\tile_gras.png
..\\\\media\\\\tile_sand.png
..\\\\media\\\\tile_asphalt.png
..\\\\media\\\\tile_fels.png

bin jetzt volle 2 tage an diesem sch**** problem und bin langsam aber sicher am verzweifeln.

für antworten bin ich sehr dankbar!

bei Antwort benachrichtigen
mr.escape Yves3 „C++: Pfade aus Textdaei auslesen“
Optionen
The fgets function reads a string from the input stream argument and stores it in string. fgets reads characters from the current stream position to and including the first newline character, to the end of the stream, or until the number of characters read is equal to n – 1, whichever comes first. The result stored in string is appended with a null character. The newline character, if read, is included in the string.
Das bedeutet, dass die längenangabe (und auch der speicherbereich, wo die eingelesenen zeichen landen) die größe der längsten zeile haben sollte (oder zur sicherheit etwas mehr). Das problem dürfte im letzten satz des zitats liegen: "The newline character, if read, is included in the string."
D.h. es ist meistens noch ein extra zeichen am ende (außer evtl. in der letzten zeile).
Gibt man die genaue länge des dateinamens an, hört fgets vor dem zeilenende auf und es wird kein extra zeichen an den dateinamen angefügt.
Die lösung ist das löschen aller überflüssigen zeichen:
#define TESTSIZE 1024
char Test[TESTSIZE];
fgets(Test,TESTSIZE-1,pDatei);
Test[TESTSIZE-1]=0;//das letzte byte im speicherblock auf '\0' setzen
char *tmp=Test;
while(*tmp>=0x20) tmp++;
*tmp=0;


mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen