Ну, argv
- массив указателей на строки. Все аргументы командной строки передаются как строки, а указатель на каждый из них удерживается argv[n]
, где последовательность для аргумента равна n+1
.
Для принимающей среды, ссылаясь на C11
, глава §5.1.2.2.1
Если значение argc
больше нуля, то строка, на которую указывает argv[0]
представляет имя программы; argv[0][0]
должен быть нулевым символом, если имя программы недоступно в среде хоста. Если значение argc
равно больше одного, то строки программы, указанные на argv[1]
, равны argv[argc-1]
, представляют собой параметры программы.
Таким образом, ясно, что для исполнения как
./123 10 10 10 // 123 двоичное имя
argv[0]
это не первый «аргумент командной строки передан в программу ». Это argv[1]
.
*argv[1]
не возвращает значение int
, которое вы передали в качестве аргумента командной строки.
В принципе, *argv[1]
дает значение первого элемента этой строки (т.е. char
значение '1'
), наиболее вероятно в ASCII кодируются значения (которые вы платформа использует), ANSD согласно ascii table'1'
имеет десятичное значение va; lue 49
, которое вы видите.
Решение: Вы должны
- Проверка на количество аргументов (
argc
)
- Петля по каждому аргументу строки
argv[1] ~ argv[n-1]
в то время как argc == n
- Преобразовать каждый из входных строки в
int
(для этого случая вы можете использовать strtol()
)