A
Warum denn das ganze so kompliziert??
Geh hald die Datei Zeile für Zeile durch und überprüfe gleich bei der aktuellen Zeile, was drin steht.
Also ungefähr so:
//PSEUDO-Code
char zeile[128];
char * parameter;
while(zeile_einlesen(zeile))
{
code = pruefe_zeile(zeile, ¶meter);
switch(code)
{
case width:
setze_width(parameter);
break;
case height:
setze_height(parameter);
break;
case bpp:
setze_bpp(parameter);
break;
default: //wenn was ungültiges drin steht
schreibe_logdatei(zeile);
break;
}
}
Die Funktion, die hinter pruefe_zeile() steht, sieht so aus:
#define ANZ_BEFEHLE 3
//oder
//const unsigned ANZ_BEFEHLE = 3;
int pruefe_zeile(const char * zeile, char ** parameter)
{
char befehle[ANZ_BEFEHLE][] = {"width=", "height=", "bpp="};
int i, anz;
for(i = 0; i < ANZ_BEFEHLE; ++i)
{
anz = strlen(befehle[i]);
if(!strncmp(befehle[i], zeile, anz))
{
*parameter = zeile + anz;
return(i);
}
}
return(-1);
}