2016-04-07 13 views
-3

Also habe ich diese Zuweisung (Eingabe einer Zeichenfolge und es wird die Anzahl der Zeichenfolgen anzeigen), wo ich erklären muss, warum die Werte argv [0] und argv [3] ändern. Also, wenn Sie durch das Programm gehen (meine String-Eingabe ist "run wie jetzt braune Kuh" argv [0] beginnt als mein Verzeichnis-Ordner ("/ home/013/w/wn /% $% $% #%/Assignment4/p2 "). Und dann beginnt argv [3] als" jetzt ". Ich verstehe nicht, warum diese Variablen sich ändern, wenn das Programm läuft, weil die" now "Zeichenfolge in argv [2] sein sollte, oder? Programm kompiliert das argv [] Array alles am Ende entspricht, aber warum nicht am Anfangargv in C++ - Bereinigung

Hier ist der Code:

#include <stdio.h> 

/* print a given string and a number in a pre-determined format. */ 
void 
print_string(int num, char* string) 
{ 
    printf("String '%d' - '%s'\n", num, string); 
} 

int 
main(int argc, char* argv[]) 
{ 
    int i; 

    /* check for command line arguments */ 
    if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */ 
     printf("Usage: %s [<string> ...]\n", argv[0]); 
     return(1); 
    } 

    /* loop over all strings, print them one by one */ 
    for (argc--,argv++,i=0 ; argc > 0; argc--,argv++,i++) { 
     print_string(i, argv[0]); /* function call */ 
    } 

    printf("Total number of strings: %d\n", i); 

    return 0; 
} 
+7

'argv [0]' ist der Dateiname zum Aufruf des Programms, die eigentlichen Kommandozeilenargumente sind in 'argv [1 ...]' –

+0

@BenVoigt bezwingen Sie mich dazu – Nacho

+2

Sie ändern sich, während das Programm läuft weil Sie tatsächlich Ihre Parameter ändern ('argc -, argv ++'), was ein Stil ist, der im Allgemeinen verpönt ist. –

Antwort

1

Array-Indizes beginnt bei 0 und das erste Element der argv ist der Weg der ausgeführten Datei, also zum Beispiel, wenn Sie Ihre Binärdatei wie folgt ausführen:

./test run how now brown cow 

Sie folgende Elemente in argv erhalten:

argv[0] = "./test" 
argv[1] = "run" 
argv[2] = "how" 
argv[3] = "now" 
argv[4] = "brown" 
argv[5] = "cow" 

Wie Sie sehen können, ist es total richtig, dass jetzt in der 3. und nicht auf dem zweiten Element.