argv в C++ разбор

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

Вот код:

#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;
}

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-м элементе.

Другие вопросы по тегам