1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

c übergebene variablen

    • Frage
  • thery
  • 13. Januar 2008 um 17:24
  • Unerledigt
  • thery
    2
    thery
    Mitglied
    Punkte
    35
    Beiträge
    5
    • 13. Januar 2008 um 17:24
    • #1

    hallo!

    folgendes:

    mein programm sieht so aus:

    int main(int argc, char *argv[]) {
    ..
    }

    beim aufrufen des programms sollen 4 integer variablen übergeben werden. wie kann ich diese variablen mit hilfe von strtol aus argv herausholen?

    wäre super, wenn mir jemand helfen könnte! :)

    lg,thery

  • sloth
    13
    sloth
    Mitglied
    Reaktionen
    7
    Punkte
    1.717
    Beiträge
    314
    • 13. Januar 2008 um 18:16
    • #2

    Hey, ich nehme mal an, du brauchst das, für das TGS Aufgabenblatt 11 :face_with_tongue:
    Im Zusatzblatt zur letzten Hausübung waren da sehr nützliche Hinweise dazu.

    Grundsätzlich wird in argc die Anzahl der Worte, die du beim Programmaufruf eingibst, gespeichert.

    Folgende Möglichkeiten:
    ./prog1 (argc=1)
    ./prog1 prm1 (argc=2)
    ./prog1 prm1 prm2 (argc=3)
    usw...

    Damit kannst du also mal ganz einfach überprüfen, ob die Anzahl der übergebenen Parameter stimmt.

    argv ist ein char array. In ihm werden nun oben genannte Worte gespeichert. An der Stelle argv[0] hast du den Programmnamen, an der Stelle argv[1] den ersten Parameter usw.

    Um jetzt aber die als char vorhandenen Parameter für unser Beispiel benutzen zu können, musst du diese erst in "brauchbare" Datentypen umwandeln. Hier kommt strtol ins Spiel. Diese Funktion wandelt dir strings (also char arrays) in long oder int Variablen um. Näheres dazu findest du in den man-Pages zu strtol. Praktisch dabei ist, dass du bei strtol auch einen end-Pointer benutzen kannst, der an das Ende des Strings zeigt und mithilfe dessen du überprüfen kannst, ob überhaupt eine Zahl und nicht ein anderes Zeichen übergeben wurde.


    Ich hoffe, die Informationen helfen dir soweit mal ein wenig :O

  • Martinez
    7
    Martinez
    Mitglied
    Punkte
    465
    Beiträge
    81
    • 13. Januar 2008 um 18:51
    • #3

    kannst auch getopt() verwenden

    computer says nooooohhhh!

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 13. Januar 2008 um 23:11
    • #4
    Zitat von Martinez

    kannst auch getopt() verwenden


    Das wäre ziemlich dumm, schließlich will er ja keine Optionen auslesen, sondern vier Argumente (vermutlich auch noch genau in der Reihenfolge, wie man sie eintippt).

    Dipper dipper dii dipper dii dipper dii duuu

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 14. Januar 2008 um 12:07
    • #5
    Code
    int i,ar[argc-1];
    
    
    for (i = 1; i < argc; i++)
    {
       ar[i-1] = strtol(argv[i],NULL,10);
    }

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • sloth
    13
    sloth
    Mitglied
    Reaktionen
    7
    Punkte
    1.717
    Beiträge
    314
    • 14. Januar 2008 um 13:20
    • #6
    Zitat von Kampi
    Code
    int i,ar[argc-1];
    
    
    for (i = 1; i < argc; i++)
    {
       ar[i-1] = strtol(argv[i],NULL,10);
    }


    Besser noch statt dem 0-Pointer einen einen error-Pointer zu machen für Fehlermeldungen, falls "falsche" Parameter übergeben wurden :)

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 14. Januar 2008 um 14:10
    • #7
    Zitat von sloth

    Besser noch statt dem 0-Pointer einen einen error-Pointer zu machen für Fehlermeldungen, falls "falsche" Parameter übergeben wurden :)

    a geh, wir sind ja hier nicht bei sysprog :face_with_tongue:
    wollte "thery" nur in die richtige richtung bringen, fuer solche feinheiten hat man ja dann ohnehin "man strtol" mit einem ausfuehrlichen beispiel.

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • sloth
    13
    sloth
    Mitglied
    Reaktionen
    7
    Punkte
    1.717
    Beiträge
    314
    • 14. Januar 2008 um 17:03
    • #8
    Zitat von Kampi

    a geh, wir sind ja hier nicht bei sysprog :face_with_tongue:
    [...]


    Na eh nicht, aber es geht schon in die Richtung :p

  • Martinez
    7
    Martinez
    Mitglied
    Punkte
    465
    Beiträge
    81
    • 14. Januar 2008 um 21:13
    • #9
    Zitat von sauzachn

    Das wäre ziemlich dumm, schließlich will er ja keine Optionen auslesen, sondern vier Argumente (vermutlich auch noch genau in der Reihenfolge, wie man sie eintippt).

    stimmt.

    computer says nooooohhhh!

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 14. Januar 2008 um 21:30
    • #10
    Zitat von Kampi

    a geh, wir sind ja hier nicht bei sysprog :face_with_tongue:

    Nicht C89-konformen Code zu schreiben ist immer ein Grund, zumindest im Fegefeuer zu landen.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • thery
    2
    thery
    Mitglied
    Punkte
    35
    Beiträge
    5
    • 15. Januar 2008 um 10:28
    • #11

    danke! habt mir alle sehr geholfen!

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 15. Januar 2008 um 11:52
    • #12
    Zitat von jeuneS2

    Nicht C89-konformen Code zu schreiben ist immer ein Grund, zumindest im Fegefeuer zu landen.

    na servas, da gehts ja ganz genau her :shinner:. so besser?

    C
    #include <stdio.h>
    #include <limits.h>
    #include <stdlib.h>
    #include <errno.h>
    
    
    int main(int argc, char **argv)
    {
            int i;
            char *endptr;
            long *ar;
    
    
            ar = (long *) malloc ( (argc - 1) * sizeof(long));
    
    
            if (ar == NULL)
            {
                    fprintf(stderr, "Cannot allocate memory\n");
                    exit(EXIT_FAILURE);
            }
    
    
            for (i = 0; i < argc-1; i++)
            {
                    errno = 0;
    
    
                    ar[i] = strtol(argv[i+1],&endptr,10);
    
    
                    if ((errno == ERANGE && (ar[i] == LONG_MAX || ar[i] == LONG_MIN))
                               || (errno != 0 && ar[i] == 0))
                    {
                            free(ar);
                            perror("strtol");
                            exit(EXIT_FAILURE);
                    }
    
    
                    if (endptr == argv[i+1])
                    {
                            free(ar);
                            fprintf(stderr, "Not a digit: %s\n",endptr);
                            exit(EXIT_FAILURE);
                    }
    
    
                    if (*endptr != '\0')
                    {
                            printf("Further characters after number: %s\n", endptr);
                    }
    
            }
    
    
            for (i = 0; i < argc-1; i++)
            {
                    printf("%ld\n",ar[i]);
            }
    
    
            /* free the whales, free the mallocs */
            free(ar);
    
    
    return 0;
    }
    Alles anzeigen

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 15. Januar 2008 um 11:53
    • #13

    Und jetzt bitte nochmal in K&R C :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 15. Januar 2008 um 15:47
    • #14
    Zitat von jeuneS2

    (...) C (...) Code zu schreiben ist immer ein Grund, zumindest im Fegefeuer zu landen.


    :grinning_squinting_face:

    Nuntium inputatum nimis brevest. Quaeso porlonga nuntium tuum ad characteres tres minimum.

    Dipper dipper dii dipper dii dipper dii duuu

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung