Аргументы командной строки в C - PullRequest
4 голосов
/ 30 июля 2010

Я выполняю эту программу со значениями 10,20,30, заданными в командной строке.

int main(int argc , char **argv)
 { 
  printf("\n Printing the arguments of a program \n");
  printf("\n The total number of arguments in the program is %d",argc);
   while(argc>=0)
    { 
     printf("%s   ",argv[argc]);
     argc--;
     }
     return 0;
  }    

Выходы Общее количество аргументов в программе - 4 (ноль) 30 20 10 ./a.out

Откуда это (ноль)? ?? 1006 *

Ответы [ 7 ]

16 голосов
/ 30 июля 2010

argv[0] (насколько это возможно) должно быть чем-то, что идентифицирует запускаемую программу.argv[1] - argv[argc-1] - это аргументы, которые фактически были введены в командной строке.argv[argc] должен быть нулевым указателем (§5.1.2.2.1 / 2).

5 голосов
/ 30 июля 2010

argc - общее количество элементов в массиве argv;они пронумерованы от 0 до argc - 1.Вы печатаете пять значений, и действительны только последние четыре.

3 голосов
/ 30 июля 2010

То, как они учили вас считать в школе, не будет работать в C. В C мы считаем 0, 1, 2, ...

2 голосов
/ 30 июля 2010

Поскольку вы печатаете argv [4], argv [3], argv [2], argv [1], argv [0], вместо argv [3], argv [2], argv [1], argv [0].

В основном вы получили отключение на одну ошибку.

0 голосов
/ 11 января 2018

Он выводит как (null) 30 20 10, потому что вы используете argv [argc], и когда вы передаете 10,20,30, тогда число аргументов равно 4 (так как первый аргумент всегда является именем программы), поэтому дляв первый раз argv [argc] означает argv [4], т. е. пятый аргумент (так как массив начинается с [0], поэтому argv [0] будет первым аргументом ... argv 1 будет вторым.... так далее ..... argv [4] будет пятым переданным аргументом), который является нулевым, поэтому он печатает как (null) 30 20 10. Для правильного результата используйте

printf("%s   ",argv[argc-1]);

Аргумент командной строки в C Программирование - Концепция

0 голосов
/ 30 июля 2010

Я думаю, что тот факт, что код while(argc >= 0), показывает, что вы знаете, что массивы индексируются нулем. Проблема в том, что вы начинаете с argc вместо argc-1.

или, другими словами, вы, похоже, понимаете, что argv [0] - это имя программы, argc ВКЛЮЧАЕТ это в качестве аргумента, поэтому, когда он говорит argc = 4, это означает, что в дополнение к название программы ...

И, как указал Джерри Коффин, C требует, чтобы argv [argc] был НЕДЕЙСТВИТЕЛЕН, как часовой, в случае, если известно, что аргументы равны 1 - argc-1 недостаточно ...

0 голосов
/ 30 июля 2010

argc будет иметь количество элементов, к которым можно получить доступ из argv[0] to argv[argc-1].Поэтому измените ваше условие соответственно, а именно print из argv [argc-1].

Здесь - это учебная ссылка на аргументы командной строки, так как есть много вещей, которые вы, возможно, упустили при чтении.Следовательно, вы не можете понять причину этого вывода.

Нумерация индексов обычно начинается с 0 по многим причинам.Пожалуйста, проверьте этот вопрос, который поможет вам понять, почему он основан на нуле.https://stackoverflow.com/questions/393462?tab=votes&page=1#tab-top

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...