2016-04-07 2 views
-3

Итак, у меня есть это назначение (введите строку и отобразите количество строк), где я должен объяснить, почему значения argv [0] и argv [3] меняются. Поэтому, когда вы проходите через программу (мой ввод строки «работает, как теперь коричневая корова» argv [0] начинается как моя папка каталога («/ home/013/w/wn /% $% $% #%/Assignment4/p2 "), а затем argv [3] начинается как« сейчас ». Я не понимаю, почему эти переменные меняются всякий раз, когда программа запущена, потому что строка« now »должна быть в argv [2], правильно? программа компилирует ARGV [] массив соответствует всем в конце концов, но почему не в началеargv в C++ clearup

Вот код:

#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]' это имя файла, используемое для вызова программы, фактические аргументы командной строки хранятся в 'argv [1 ...]' –

+0

@BenVoigt избили меня – Nacho

+2

Они меняются во время работы программы потому что вы на самом деле изменяете свои параметры ('argc -, argv ++'), который является стилем, который обычно не одобряется. –

ответ

1

массива индексы начинаются 0 и первый элемент argv путь исполняемого файла, так, например, если вы выполните свой двоичный код следующим образом:

./test run how now brown cow 

Вы получите следующие элементы в argv:

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

Как вы можете видеть, это суммарно прямо, что сейчас находится на 3-м, а не на 2-й элемент.

Смежные вопросы