Falscher Funktionslauf



  • Hallo,

    Kann mir einer sagen warum bei folgendem Code mein Programm so reagiert:
    ./a.out -ib input
    #1##4#
    Inhalt von help();

    normal sollte sowas kommen:
    ./a.out -ib input
    #1##3#

    case 'i':
            if(strncmp(optarg, "s", 1) == 0) {
              str = argv[optind];
            }
            else if(strncmp(optarg, "b", 1) == 0) {
              mot = argv[optind];
    
              ++optind;
              if(argv[optind] == NULL)
              {
              printf("#1#");
                size = 0;
              }
              else {
              printf("#2");
                size = atoi(argv[optind]);
              }
    
              ++optind;
              if(argv[optind] == NULL) {
                set = 0;
                printf("#3#");
              }
              else {
              printf("#4#");
                set = atoi(argv[optind]);
              }
            }
            else {
              help();
            }
            break;
    

    Danke im voraus.



  • Erstmal frag ich mich, was überhaupt in optarg drinsteht. Den Rest kann ich mir irgendwie zusammenreimen.

    Vielleicht solltest du einfach mal versuchen mit dem Debugger zu arbeiten, denn damit kannst du genau sehen, in welcher Variable zu einem bestimmten Zeitpunkt, welcher Wert ist. Das hilft meistens ungemein weiter ;).



  • Das sagt gdb:

    [code]
    (gdb) print optarg // else if(strncmp(optarg, "b", 1) == 0) {
    $1 = 0
    (gdb) print argv[optind] // mot = argv[optind];
    $2 = 0xbffffecf "-ib"
    (gdb) print argv[++optind] // if(argv[optind] == NULL) {
    $3 = 0xbffffed3 "input"
    (gdb) print argv[++optind] // if(argv[optind] == NULL) {
    $4 = 0x0

    (gdb)
    [code]
    ich finde es komisch das im ersten argv[optind] -ib drinn steht.
    Also das programm soll die beiden "eingaben" nach input nur "optional" betrachten, daher die Prüfung.



  • Ich finde es nicht komisch, sondern total richtig, dass da -ib drinsteht, du hast -ib schließlich als 1. Parameter übergeben.

    Wenn du dein Programm so aufrufst:

    a.out -ib input
    

    dann steht folgendes in argv:

    argv[0] = "a.out"
    argv[1] = "-ib"
    argv[2] = "input"
    

    Ich komme immer noch nicht so ganz mit, was du da eigentlich genau machen willst.
    So wie es aussieht, wertest du erstmal -ib aus bzw. du wertest erstmal das -i aus und schaust dann nach, welcher Wert (Buchstabe) hinter -i steht (Im Beispiel das b). Als nächstes gehst du die Parameter durch, die danach kommen, um diese weiter auszuwerten.


Anmelden zum Antworten