getopt
-
Ehrlich gesagt werde ich aus dem überhaupt nicht schlauer. Erstens weil es auf Englisch ist und bin mir auch nicht sicher ob ich die Antworten auf meine Fragen gefunden habe.
Wenn ich in der Kommandozeile -s -t -h eingebe sind das 3 chars. Wie kann man 3 chars in ein Integer speichern. Dass er meine Eingaben speichert braucht er da nicht ein char[].
Manchmal habe ich ein optarg[0] gesehen. Meistens sehe ich in den Beispielen optarg. Welches ist jetzt richtig oder geht beides.
Egal was ich eingebe es kommt immer die else-Funktion raus. Wieso?
Das steht zwar drinnen aber ist mir unklar. Wozu dient optopt und optind
-
Lass dir doch die übergebenen Argumente mit den Standardmitteln anzeigen, dafür brauchst du keine extra Bibliothek. Die Argumente lassen sich einfach mit strcmp vergleichen.
Gruß,
w.#include <string.h> int main ( int argc, char* argv[] ) { while ( argc-- > 0 ) puts ( argv [ argc ] ); return 0; }
-
@wattsafugga
Tut mir leid aber mir ist dein Beispiel unklar, wie mir das weiter helfen kann.
Je nachdem welches Ergebnis ich brauche, muss ich das aus einer Datei wo Zeilen mit unterschiedlichen Anfangsbuchstaben beginnen und durch Beistiche getrennt sind, das richtige Wort im Dos anzeigen.
# aaaaa, bbbb, cccc, eeee
? ggggg, ffff, mmmm, ssss
# aaaaa, bbbb, cccc, eeeeJetzt brauche ich aus einer Datei die Werte von bbbb aus allen # Zeilen
Und da ich schon am Anfang wegen einem Fehler nicht weiterkomme wäre es für mich hilfreich eine Antwort auf diese Fragen zu bekommen.
-
Wenn ich in der Kommandozeile -s -t -h eingebe sind das 3 chars. Wie kann man chars in ein Integer speichern. Dass er meine Eingaben speichert braucht er da nicht ein char[].
-
Manchmal habe ich ein optarg[0] gesehen. Meistens sehe ich in den Beispielen optarg. Welches ist jetzt richtig oder geht beides.
-
Egal was ich eingebe es kommt immer die else-Funktion mit "False Function" raus. Wieso?
Das steht zwar drinnen aber ist mir unklar. Wozu dient optopt und optind
-
-
juhuu schrieb:
@wattsafugga
- Wenn ich in der Kommandozeile -s -t -h eingebe sind das 3 chars. Wie kann man chars in ein Integer speichern. Dass er meine Eingaben speichert braucht er da nicht ein char[].
Das sind 8 chars ( 3 Minus, 2 Leerzeichen, ein 's', ein 't', ein 'h' ).
Deine main-Funktion hat zwei Variablen in der Parameterliste: int argc und char* argv[].
Deine Eingaben werden wie folgt auf die Variablen verteilt:
arg[1] zeigt auf "-s", arg[2] zeigt auf "-t", arg[3] zeigt auf "-h". Das sind Zeichenketten, keine einzelne chars.
arg[0] zeigt automatisch auf den Namen deines Programms. argc hat die Anzahl der überbebenen Parameter, inklusive des Programmnamens, hier also 4.
Nein, er braucht also kein char, ein char* tuts auch.Ein char ist ein Zeichen, intern wird es als eine Ganzzahl, mit einem Wertebereich von -128 bis +127 für signed char und einem Wertebereich von 0 bis 255 für unsigned char repräsentiert.
juhuu schrieb:
- Manchmal habe ich ein optarg[0] gesehen. Meistens sehe ich in den Beispielen optarg. Welches ist jetzt richtig oder geht beides.
Welche Beispiele, welches optarg. Nochmal: Du brauchst keine extra Bibliothek, um an die Eingabeparameter ran zu kommen.
juhuu schrieb:
- Egal was ich eingebe es kommt immer die else-Funktion mit "False Function" raus. Wieso?
Das steht zwar drinnen aber ist mir unklar. Wozu dient optopt und optind
[/quote]
Weil optarg weder 1, noch 2, noch 3 ist.
-
- Bei getopt ist "c:stf:h" eine Zeichenkette. Wenn ich jetzt
programm.exe -c 1 -s -t -f datei.txt
eingebe, wie kann er das in "int opt" speichern. Wäre das nicht ein String mit char[]
-
Ich habe es so in einem Bsp. gesehen. Ich brauche meine Bibliothek um mit meinen Eingabeparamtern andere Funktionen auszuführen.
-
Bsp. zu dem.
printf("Die eingabe war %c",optarg); => optarg = 1 if(optarg == 1) \*Bei Kollegen habe ich gesehen dass die optarg[0] geschrieben haben. Aber in den Einführungsbeispielen steht immer nur optarg*\ Funktion 1(); if (optarg == 2) Funktion 2();Wenn ich in der Kommandozeile -c 1 (oder 2 oder 3) eingebe
Wieso ist dann optarg nicht 1,2 oder 3 und führt die if-Funktion aus
-
Ich fürchte das führt zu weit, wenn wir hier bei den Grundlagen anfangen. In diesem e-book gibt es eine gute Anleitung zum Umgang mit Kommandozeilenargumenten:
http://openbook.galileocomputing.de/c_von_a_bis_z/c_015_000.htm#Xxx999328
Wenn Du da etwas nicht verstehst, dann arbeite Dich erstmal durch ein Tutorial oder lies Dir die Einführungskapitel durch.
-
Anhand von diesem Buch und anderen Unterlagen arbeite ich doch.
Sag doch mal bitte wo dann genau das Problem liegt.
Aber nicht andauernd irgendwelche Links
-
Ich würde einmal in der Unix-Ecke nachfragen.
getopt() steht nicht im ANSI-Standard und deshalb will hier auch keiner was davon hören.
-
Danke Flamer für die Info.
So ein verhalten finde ich schon langsam traurig oder dämlich. Tu mir wirklich schwer mich für die richtige Wortwahl zu entscheiden.
-
Hi!
juhuu schrieb:
Hallo
In opt wird ja ein Integer gespeichert. Mir ist unklar wieso ein Integer wird da nicht ein char von cstfh gespeichert und was ist wenn ich mehrere chars eingebe.
Genügt das optarg oder brauche ich ein optarg[0]Wie kommst du auf Integer,

optarg ist vom Typ char*, da ist ein Vergleich mit einem Integer wenig sinnvoll.juhuu schrieb:
Hallo
Wenn ich im Dos "programm.exe -c 1 oder 2 oder 3" eingebe kommt immer False Function raus.Es ist sehr unwahrscheinlich, das die Adresse des Arguments 1, 2, oder 3, 1, 2, oder 3 ist.
Hier ist ein Beispiel, wie man getopt benutzt:
http://www.gnu.org/software/libtool/manual/libc/Example-of-Getopt.html#Example-of-GetoptGruß,
B.B.
-
Hier ist noch einmal der Code.
int opt; while ((opt=getopt(argc, argv, "c:stfh")) != -1)#include <stdio.h> #include <stdlib.h> #include <getopt.h> #include <string.h> int main(int argc, char *argv[]) { int opt; FILE *datei; char line [100]; char *info; char gll []={"$GPGLL"}; while ((opt=getopt(argc, argv, "c:stfh")) != -1) { switch (opt) { case 'c': { if (optarg[0] == '1') printf("g"); else if (optarg[0] == '2') printf("f"); else if (optarg[0] == '3') printf("e"); else printf("False Function\n"); } break; case ':': fprintf(stderr, "missing value.\n"); break; case '?': fprintf(stderr, "Option is unkown\n"); break; } datei = fopen("gpslog.txt","r"); if (datei != NULL) { while ((fgets(line,100,datei)) != NULL) { if (strncmp(line,gll,6) == 0) { info=strtok(line, ","); fputs (info+3, datei); } } } else printf ("Can't open or find datei"); fclose(datei); } return 0; }Wegen diesen zwei Zeilen komme ich auf die Frage
int opt; while ((opt=getopt(argc, argv, "c:stfh")) != -1)und das zweite war
if (optarg[0] == '1') printf("g"); else if (optarg[0] == '2') printf("f");Der Fehler war dass ich "if(optarg == 1)" geschrieben habe weil in jedem Bsp. welches ich gesehen habe es so stand.
printf ("Die eingabe war %s", optarg); => optarg = 1Und weiters steht beim FILE immer "Cant find or open datei". Wieso kommt es nicht in die Text-Datei.
Danke für deine Hilfe
-
juhuu schrieb:
Und weiters steht beim FILE immer "Cant find or open datei". Wieso kommt es nicht in die Text-Datei.
Danke für deine HilfeDas Programm findet die Datei nicht, sie muss im selben Verzeichnis liegen, wie die ausführende Datei.
Oder du hast nicht die erforderlichen Rechte.