Все остается в строках, когда вы передаете их в программу в качестве аргументов, даже если они являются одиночными символами. Например, если ваша программа называлась «myprog» и у вас это было в командной строке:
myprog arg1 53 c a "hey there!"
Тогда в программе вы получите следующее:
printf("%d\n", argc);
for(int i = 0; i < argc; i++)
{
printf("%s\n", argv[0]);
}
Вывод этого будет:
6
myprog
arg1
53
c
a
hey there!
Дело в том, что все в командной строке превращается в строки с нулевым символом в конце, даже одиночные символы. Если вы хотите получить символ 'c' из командной строки, вам нужно сделать это:
char value = argv[3][0];
не
char value = argv[3]; // Error!
Даже значение «53» не превращается в int. вы не можете сделать:
int number = argv[2]; // Error!
argv[2]
- это { '5', '2', '\0' }
. Вы должны сделать это:
int number = atoi(argv[2]); // Converts from a string to an int
Надеюсь, это понятно.
Edit: btw, все вышеперечисленное так же верно для C (отсюда и операторы printf). Он работает точно так же, как в C ++.