Ubuntu передает настройки командной строки в программу C

#c

#c

Вопрос:

Я изучаю программирование на C, я написал пример кода для приема параметров из терминала и распечатки аргументов.

Я вызываю программу следующим образом: ./myprogram 1

Я ожидал, что 1 будет распечатан для длины аргумента вместо 2. почему это так? После аргумента «1» не было интервала

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

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

    printf("%d", argc);

    return EXIT_SUCCESS;
}
  

Ответ №1:

Первый аргумент — argv[0] это имя, с которым была вызвана программа. Итак, есть два аргумента, а второй — argv[1] «1».

Редактировать

Редактирование, чтобы прояснить: argc всегда должно быть проверено. Как бы это ни было необычно, совершенно законно argc , чтобы быть 0.
Например, в Unix execvp("./try", (char **){NULL}); это законно.

Комментарии:

1. @Dr Deo Не всегда, я думаю, что C99 поддерживает концепцию программы без каких-либо аргументов.

2. @cnicutar — C 89 разрешено int main() вместо int main(int argc, char **argv)

Ответ №2:

«./myprogram» считается первым аргументом.