argv - Probleme mit Argumenten in main()
-
Hallo alle zusammen,
ich bin momentan dabei die ersten Versuche mit Argumenten in der Hauptfunktion zu unternehmen. Dabei stoße ich auf folgendes Problem: Ich rufe das Programm mit n Argumenten auf. Bei der Prüfung der Argumente in der Hauptfunktion kann ich aber leider keines der Argumente direkt vergleichen. argc liefert mir die Anzahl der Argumente und argv[x] doch den Pointer auf das jeweilige Argument, oder ? Leider habe ich etwas misverstanden. Ansonsten müsste folgender Code bei Zeile 9 nach in der Laufzeit in meinem Aufruf hineinspringen.
Habe bereits einiges über Argumente in Hauptfunktionen gelesen, jedoch keine passende Antworte gefunden.
int main(int argc, char *argv[]) { int rv = 0; /** * Check Parameters */ if(argc > 1 && argc <= 4) { // Disable Overwriting if(argv[1] == "-n") { if(argc == 3) { /** * Output-file defined * Write into file */ printf("-n aktiv, 2 file(s)"); } else if(argc == 2) { /** * Output-file not defined * Write on Standard-Output */ printf("-n aktiv, 1 file(s)"); } else { /** * Input-/Output-file not defined * Argument -n is dispensable */ printf("-n aktiv, 0 file(s)"); } } } else if(argc > 4) { /** * Too many arguments */ printf("Too many arguments"); printf("\n"); printf("Usage: copy [-n] [file1 [file2]]"); rv = 1; } else { /** * Wheter Input-file nor * Output-file is defined * Standard-Input <> Standard-Output */ printf("NO ARGUMENTS"); } /** Testszenario */ return rv; }
Das hier wiederum läuft und ist meines Erachtens nach genau dieselbe Methode um auf die Parameter zuzugreifen:
int main(int argc, char **argv) { int i; for(i=0; i < argc; i++) { printf("argv[%d] = %s ", i, argv[i]); printf("\n"); } return EXIT_SUCCESS; }
Ich hoffe ihr könnt mir helfen.
Tolles Forum übrigens. Habe schon viele hilfreiche Sachen zu Problemen bei euch gefunden.Gruß
bluma
-
Du musst die Funktion strcmp nehmen.
-
feigling schrieb:
Du musst die Funktion strcmp nehmen.
Danke für die Antwort.
Weißt du auch die Möglichkeit ohne zusätzliche Funktion ?
-
if(argv[1][0] == '-' && argv[1][1] == 'n' )
Ich rate dir aber auch zu der Funktion!
Tut schließlich nicht weh die zu verwenden.//EDIT:
So macht das Ganze mehr Sinn:if(argc == 4) { /** * Output-file defined * Write into file */ printf("-n aktiv, 2 file(s)"); } else if(argc == 3) { /** * Output-file not defined * Write on Standard-Output */ printf("-n aktiv, 1 file(s)"); } else { /** * Input-/Output-file not defined * Argument -n is dispensable */ printf("-n aktiv, 0 file(s)"); }
Beachte die Vergleiche mit argc.
Ist -n angegeben hast du schonmal 2 Argumente
(den Programmnamen und -n) argc = 2!
-
Storm.Xapek.de schrieb:
if(argv[1][0] == '-' && argv[1][1] == 'n' )
Ich rate dir aber auch zu der Funktion!
Tut schließlich nicht weh die zu verwenden.Danke ebenfalls für die Antwort. Es funktioniert beides. Ich werde wohl die hartnäckige Lösung verwenden, weil unser Professor eine zähe Nuss ist. Fundamental, d.h. grundlegendes Werkzeug verstehen zu lernen, keine / wenige Extrafunktionen/Bibliotheken hinzuziehen. Ihr kennt das sicher..
Wobei ich mich ja immer wieder frage: Was ist grundlegendes Werkzeug und was nicht. Da kann man sich sicherlich lange drüber unterhalten.
-
bluma schrieb:
Wobei ich mich ja immer wieder frage: Was ist grundlegendes Werkzeug und was nicht. Da kann man sich sicherlich lange drüber unterhalten.
Strcmp ist sicherlich grundlegend. Grundsätzlich würde ich alles was in der ANSI C Standardbibliothek enthalten ist, als grundlegend bezeichnen.