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!
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
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
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