Schwierigkeit mit Argumenten



  • Hallo,

    ich Neuling versuche seit Tagen erfolglos folgenden Code zum laufen zu bringen:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char* argv[])

    {
    int x, r;
    char string[20];

    if (argc !=3)
    /*keine Parameter angegeben*/
    {
    printf("Dieses Programm braucht zwei Parameter:\n");
    printf("Geben sie ein Wort ein und druecken sie die Leertaste: \n");
    printf("Dann geben sie die Anzahl der gewuenschten Widerholungen ein\nund druecken Return: \n");
    exit (0); /*Programm beenden*/
    }

    /*Es wurden zwei Parameter eingegeben*/
    string =(argv[1]); /*String holen*/
    r = atoi(argv[2]); /*Anzahl*/

    for (x=0; x<r; x++)
    printf("%s\n", string); /*String ausgeben*/
    exit (0);
    }

    Der Compiler meckert ab und zu über:"string =(argv[1]);"
    Wer kann mir auf die Sprünge helfen?
    argv[1] wird nicht richtig übergeben.

    Danke Euch


  • Mod

    argv[1] ist ein char*, atring ist ein char[20]. Das sind zwei sehr verschiedene Dinge und können daher nicht einander zugewiesen werden. Zumindest nicht durch ein einfaches =, es gibt aber spezielle Hilfsfunktionen. Guck am besten mal in einem guten(!) C-Lehrbuch, was der Unterschied zwischen Zeigern und Arrays ist, falls dir der Unterschied nicht klar sein sollte. Dort findest du auch Anleitung, wie das mit den Zeichenketten in C geht.

    Was du machen kannst, ist, string als ein char* zu deklarieren (oder noch korrekter als ein const char*). Dann macht dein Programm was es soll. Oder du lässt string und r ganz weg und benutzt gleich argv[1] und argv[2] an deren Stelle.



  • Beachte auch, dass atoi eine hinsichtlich des Rückgabewertes unsichere Funktion ist, z.B.

    atoi("0") == atoi("bla fasel") == atoi("")
    


  • Das Programm macht genau was es soll.
    Hinsichtlich der Arrays und Zeiger weiß ich wirklich noch nicht bescheid.
    So weit war ich mit lernen noch nicht, aber ich hatte ganz einfach probiert ein Programm das nur ein Zeichen statt einem String ausgibt, so umzubauen das es die Zeichenkette ausgibt.
    Danke Euch für die schnelle Hilfe.
    Hier der Code des ursprünglichen Programms:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char*argv[])
    {
    int x, r;
    char c;

    if (argc !=3)
    {
    /*keine Parameter angegeben*/
    printf("Dieses Programm braucht zwei Parameter:\n");
    printf("rept c r\n");
    printf("c ist das Zeichen\n");
    printf("r die Anzahl der Wiederholungen\n");
    exit (0); /*Programm beenden*/
    }

    /*
    Es wurden zwei Parameter angegeben
    argv[1] enthält das Zeichen
    argv[2] ist die Anzahl
    */
    c=argv[1][0]; /*Zeichen holen*//*ersteres Zeicen des Strings argv[1]*/
    r=atoi(argv[2]); /*Anzahl*/

    for (x=0; x<r; x++)
    putchar(c); /*Zeichen ausgeben*/
    exit(0);
    }

    Gruß Mario



  • Wo genau hapert es denn jetzt? Ein Array ist eine Ansammlung von einzelnen Werten, die hintereinander im Speicher stehen - die sprichst du normalerweise über ihren Index an.
    Und Strings als Typ gibt es in C nicht, deshalb wird ein String als Array von Zeichen dargestellt (mit einem '\0' als Kennzeichnung für das Ende). Und zur Erleichterung der Arbeit bietet C auch Funktionen, die damit zurechtkommen:

    char* s = argv[1];
    ...
    puts(s);
    

    PS: sfds



  • so langsam arbeite ich mich durch.

    Danke


Log in to reply