#c #arguments
#c #аргументы
Вопрос:
Итак, что-то простое вроде этого:
int main(int argc, char* argv[]) {
int size = sizeof(argv);
printf("%d", size);
}
Если я передаю ему 5 аргументов, он сообщает мне, что есть 4 аргумента. Если я передаю ему 10 аргументов, он сообщает мне, что есть 4 аргумента. Что-то здесь не так или мой компилятор ошибся?
Комментарии:
1.
sizeof(argv)
является ли размер указателя, обычно 4 или 8, равным 4 в вашей системе. Возможно, вам следует просто использовать значение вargc
, поскольку для этого оно и существует.2. Количество аргументов представлено переменной argc .
3. Спасибо, ребята. Высоко ценится.
4. Кроме того,
argc
аргументы 1 из-за исполняемого файла в команде запуска.5. Стандарт неоднозначен, он просто говорит «имя программы», но не говорит, что именно это означает, и оставляет это на усмотрение реализации, как и все другие аргументы.
Ответ №1:
int size = sizeof(argv);
Это не дает вам количество аргументов в argv
массиве, это дает вам размер argv
переменной в байтах. Обычно это четыре или восемь для указателей на момент, когда я отвечаю на этот вопрос, и, очевидно, в вашем конкретном случае их четыре.
Если вы хотите знать, сколько элементов в argv
, это именно то, что argc
нужно.
Целое argc
число содержит количество аргументов, включая первый, который обычно представляет запускаемую программу. Итак, вы можете получить аргументы с помощью цикла, подобного:
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i) {
printf("Argument #%d is %sn", i, argv[i]);
}
return 0;
}
Запуск этого с определенными аргументами показывает это в действии:
pax$ ./testprog abc def 123 789
Argument #0 is ./testprog
Argument #1 is abc
Argument #2 is def
Argument #3 is 123
Argument #4 is 789
Другой способ, поскольку требуется, чтобы это argv[argc]
был нулевой указатель, — обойти счетчик и проверить значения напрямую:
#include <stdio.h>
int main(int argc, char *argv[]) {
for (char **arg = argv; *arg != NULL; arg) {
printf("Argument is %sn", *arg);
}
return 0;
}
Это имеет немного другой результат, потому что я не использую счетчик, но аргументы точно такие же:
pax$ ./testprog pax diablo
Argument is ./testprog
Argument is pax
Argument is diablo
Ответ №2:
Пожалуйста, обратитесь к документации из gcc здесь
Цитата:
Значением аргумента argc является количество аргументов командной строки. Аргумент argv представляет собой вектор строк C; его элементами являются отдельные строки аргументов командной строки. Имя файла запускаемой программы также включается в вектор в качестве первого элемента; значение argc учитывает этот элемент. Нулевой указатель всегда следует за последним элементом: argv[argc] — это нулевой указатель.
Для команды ‘cat foo bar’ значение argc равно 3, а argv содержит три элемента: «cat», «foo» и «bar».
argc
по сути, нужно знать общее количество аргументов командной строки, переданных в командной строке. Даже имя исполняемого файла указано в аргументах команды (если вам интересно, почему — посмотрите здесь (Дополнительно)).
Итак, в качестве короткого ответа argc - 1
вы получите общее количество аргументов. Очень распространенной практикой программирования argc
является проверка того, передано ли минимальное требуемое количество аргументов или нет.