wieder mal argv und argc
-
Hi,
ich habe hier eine kleine Parameterübergabe geschrieben. Leider stelle ich mit dem debugger fest das der malloc (egal welcher) Aufruf manchmal funkt und manchmal nicht. Ich kann mir das überhaupt nicht erklären , deshalb stelle ich mal den Code hier rein.
/* Globalvariable */ char *valuefile; char *pathcounter; char *dateiname; int value_number; /*#########################################################*/ int main(int argc, char *argv[]) { int oldvalue = 0; int newvalue = 0; int diffvalue; int i; DIR *pfad; /*##########################################################################*/ /* alle Eingaben auf Variablen übertragen */ for (i = 1 ; i < argc ; i++) { if (strstr(argv[i] , "-vp") != 0) /* Verzeichnis und Name der Variablendatei */ { i++; valuefile = (char*)malloc(strlen(argv[i])+1); strcpy (valuefile , argv[i]); continue; } /* Pfad des Verzeichnisses in das die kWh Dateien geschrieben werden sollen */ if (strstr(argv[i] , "-kp") != 0) { i++; pathcounter = (char*)malloc(strlen(argv[i])+1); strcpy (pathcounter , argv[i]); if (pathcounter[strlen(pathcounter) - 1] != '/') { /* speicher um ein byte erhöhen und abschliessendes "/" eintragen */ pathcounter = (char*)realloc(pathcounter , strlen(pathcounter) + 1 ); strcat(pathcounter , "/"); } continue; } /* Name der kWh Datei die erzeugt werden soll */ if (strstr(argv[i] , "-fn") != 0) { i++; dateiname = (char*)malloc(strlen(argv[i])+1); strcpy (dateiname , argv[i]); continue; } /* Nummer der Variable die be/verarbeitet werden soll */ if (strstr(argv[i] , "-vn") != 0) { i++; value_number = atoi(argv[i]); continue; } /* Hilfe ist angewählt */ if (strstr(argv[i] , "--help") != 0) { printf ("Version:%s\n\n" , version); parameterausgabe(); return 0; } } /*##########################################################################*/ /* überprüfe ob alle Angabe richtig sind */ if (valuefile == NULL || pathcounter == NULL || dateiname == NULL) { printf ("fehlerhafter Parameter\n"); parameterausgabe(); return 0; } if ((pfad = opendir(pathcounter)) == NULL) { printf ("fehlerhafter Parameter\n"); parameterausgabe(); return 0; } /*##########################################################################*/ /* eigentliches Programm */ for (;;) { sleep (5); newvalue = read_data (valuefile , value_number); if ( oldvalue == newvalue ) { continue; } /* berechne den neuen Zäherstand */ if ( newvalue > oldvalue) { diffvalue = newvalue - oldvalue; oldvalue = newvalue; } else { diffvalue = newvalue + (maxvalue - oldvalue); } write_day( dateiname , diffvalue); write_month( dateiname , diffvalue); } return EXIT_SUCCESS; }
Danke
worst_case[ Dieser Beitrag wurde am 21.06.2003 um 12:03 Uhr von worst_case editiert. ]
-
globale variablen sind boese - hau sie weg
du pruefst nie ob du malloc auf einen guten zeiger uebrgibst...
was wenn jemand einen syntax fehler angibt:deinprogramm -vp
und schon uebergibst du strlen() einen NULL zeiger...
und lass das casten bei malloc weg, das ist auch boese
achja, du koenntest auch n paar funktionen verwenden, damits schoener aufgeteilt wird