Brauche Hilfe, bin C-Neuling!!!



  • Guten Morgen,

    was mir gerade noch einfiel: Für viele Programme die man in grauer Vorzeit ja fast immer über die "Kommandozeile" gestartet hat, gab es Regeln für die Kommandozeilenparameter eines Programms. Diese waren dann irgendwo nachzulesen (helpfile etc).
    @ska_emily: es wäre gut, wenn Du mal VollständiG postest welche Kommandozeilenparameter für Dein Program erlaubt sein sollen und welche "abartig eingegebenen" zusätzlich erkannt werden sollen.
    Sowas wie zB: "-1" "-2" "-3" "-4" ist erlaubt, "1.2.3.4.5" soll auch erkannt werden und Bild 1 - 4 nacheinander ausgeben, sowie für die 5 eine Fehlermeldung ausgeben...



  • ska_emily schrieb:

    Weiß jemand, wie man sowas abfagen kann?

    wie CStoll schon gesagt hat: das zweite Zeichen von argv[1] mit '\0' vergleichen, dass das stringende markiert. is zwar für den zweck etwas übertrieben aber man könnte aus auch so machen:

    ...
    if (argc!=2 || strlen(argv[1])!=1 ) // prüft ob in argv[1] mehr als ein zeichen steht
    {
       fprintf(stderr, "(E) Falscher Aufruf\n");
       fprintf(stderr, "Use: %s [0..3]\n", argv[0]);        
       return 1;
    }
    

    wobei ich grad überlegen muss: wenn argc!=2 dann wird strlen(...) trotzdem abgefragt... gibt das irgend ne speicherverletzung, ich meine man liest ja in "fremdem" speicher.



  • santa klaus schrieb:

    wobei ich grad überlegen muss: wenn argc!=2 dann wird strlen(...) trotzdem abgefragt... gibt das irgend ne speicherverletzung, ich meine man liest ja in "fremdem" speicher.

    Du hast Glück - die C Logikoperatoren haben eine eingebaute "Kurzschluss-Automatik", d.h. wenn der erste Operand von || schon wahr (bzw. der erste Operand von && falsch) ist, wird der zweite gar nicht mehr ausgewertet, weil das Ergebnis ja schon feststeht. Darum sind in C auch Abfragen ala if(str!=NULL && irgendeine Bedingung zu str)... üblich.


Anmelden zum Antworten