Hallo nic
nein, ich allokiere nicht.
Der gesamte Code wäre sicher etwas zu labg, deshalb habe ich mich auf die fraglichen Teile beschränkt. In der If-Kaskade und der Case Abfrage kann man sehen, das ich auch noch weitere Parameter einlese, dort funktioniert alles einwandfrei - weil es nur einer Umwandlung von atoi bedarf...
Zum Code: Mir ist es noch nicht gelungen es überlsichtlicher zu posten - ich arbeite daran!
#include <stdio.h>
#include <string.h>
#define MAX_ZEILENLAENGE 200
char *einheit[ ] = {"DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS", "DIGITS"};
float offset[ ] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char zeile[MAX_ZEILENLAENGE];
int label = 0;
int akt_laenge_zeile = 0;
char akt_parameter_name[] = "";
int main(void){
fz_parameter = fopen("parameter.txt", "r");
if(fz_parameter == NULL){
printf("\nDatei parameter.txt konnte nicht geöfnet werden!\n");
return;
}
while(fgets(zeile, MAX_ZEILENLAENGE, fz_parameter) != NULL){
if( strlen(zeile) > 1){ // Alle Zeilen ignorieren die kürzer als 1 Zeichen sind.
if(strchr(zeile, '#') == NULL){ // Alle Auskommentierten Zeilen ignorieren.
if(label == 0){ // 0=Ja!: Parameter suchen. (<>0=Nein!: Parameterreihe bearbeiten)
if(strstr(zeile, "---") != NULL){ // Alle Parameterüberschriften, beginnend mit `’---‚ finden
akt_laenge_zeile = strlen(zeile);
j=0; // Herausschneiden der ...
for(i=3; i<=akt_laenge_zeile-5; i++){ // ... Parameternamen ...
akt_parameter_name[j]= zeile[i]; // ... aus den mit ...
j++; // --- beginnenden und ---
} // ... abschließenden Zeilen, sowie Stringabschluß ...
akt_parameter_name[j]='\0'; // ... mit '\0'.
if(strcmp(akt_parameter_name, "einheit") == 0){ // --- 3 Einheiten ---
printf("Name: %s\n",akt_parameter_name);
label = 3;
}
if(strcmp(akt_parameter_name,"offset") == 0){ // --- 5 Offset b ---
printf("Name: %s\n",akt_parameter_name);
label = 5;
}
}
}
else{ // <>=Nein!: Parameterreihe jetzt bearbeiten.
switch(label){
case 3: // --- 3 Einheiten ---
printf("Reihe: %s\n", zeile);
/*einheit[0]= strtok(zeile," ");
for(i=1; i<=11; i++){
einheit[i] = strtok(NULL, " ");
}*/
label=0; break;
case 5: // --- 5 Offset b n.i.o. ---
printf("Reihe: %s\n", zeile);
printf(">>> %f <<<",strtof(strtok(zeile, " ")));
label=0; break;
default: // --- F E H L E R ---
printf("Programminterner Fehler (bei switch-Marke)\n"); label=0; break;
}
}
}
}
}
fclose(fz_parameter);