ichunddu
09-11-2006, 15:42
Hallöchen!
Ich möchte gerne wissen wie ich einen Dateiinhalt richtig parse?!
Ich hab da mal was mitgebracht ;)
memset(buffer, 0, sizeof(buffer));
ret = fread(buffer, sizeof(buffer)-1, 1, fp);
fclose(fp);
oldptr = ptr = buffer;
i = 0;
while( ptr < (buffer + strlen(buffer))) {
ptr = strchr(oldptr, '@');
if( ptr == NULL )
break;
strncpy(feld[i].variable, oldptr,
(((ptr-oldptr)) < sizeof(feld[i].variable) ?
((ptr-oldptr)) : sizeof(feld[i].variable)-1));
ptr++;
feld[i].variable2 = atoi(ptr);
while( *ptr != '\n' )
ptr++;
ptr++; // next line in buffer
oldptr = ptr;
i++;
if( i > 9 || ptr > (buffer + strlen(buffer) ) )
break;
}
Was soll der code machen?
In einer Datei stehen einige Werte. Diese soll so aussehen
String@Zahl
String@Zahl
String@Zahl
...
Eingelesen werden soll maximal 10 dieser Zeilen.
Dieser Code läuft auch wunderbar, nur wenn ich bspw. genau 10 Zeilen habe und in der letzten das Newline weglasse, kommt es zu einem Pufferüberlauf. Leider weiß ich nicht, wie ich den verhindern soll!
Die Stelle mit dem atoi() gefällt mir eigentlich auch nicht, aber hier ist es der Funktion anscheinend egal ob am Ende ein Newline steht oder nicht :)
Ich möchte gerne wissen wie ich einen Dateiinhalt richtig parse?!
Ich hab da mal was mitgebracht ;)
memset(buffer, 0, sizeof(buffer));
ret = fread(buffer, sizeof(buffer)-1, 1, fp);
fclose(fp);
oldptr = ptr = buffer;
i = 0;
while( ptr < (buffer + strlen(buffer))) {
ptr = strchr(oldptr, '@');
if( ptr == NULL )
break;
strncpy(feld[i].variable, oldptr,
(((ptr-oldptr)) < sizeof(feld[i].variable) ?
((ptr-oldptr)) : sizeof(feld[i].variable)-1));
ptr++;
feld[i].variable2 = atoi(ptr);
while( *ptr != '\n' )
ptr++;
ptr++; // next line in buffer
oldptr = ptr;
i++;
if( i > 9 || ptr > (buffer + strlen(buffer) ) )
break;
}
Was soll der code machen?
In einer Datei stehen einige Werte. Diese soll so aussehen
String@Zahl
String@Zahl
String@Zahl
...
Eingelesen werden soll maximal 10 dieser Zeilen.
Dieser Code läuft auch wunderbar, nur wenn ich bspw. genau 10 Zeilen habe und in der letzten das Newline weglasse, kommt es zu einem Pufferüberlauf. Leider weiß ich nicht, wie ich den verhindern soll!
Die Stelle mit dem atoi() gefällt mir eigentlich auch nicht, aber hier ist es der Funktion anscheinend egal ob am Ende ein Newline steht oder nicht :)