недопустимое преобразование из "char *" в "char" - PullRequest
2 голосов
/ 07 апреля 2010

у меня есть,

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

и один из аргументов, которые я передаю, - это символ. Это дает сообщение об ошибке в заголовке, когда я иду к компиляции

Как мне исправить это?

Привет

Пол

Ответы [ 4 ]

3 голосов
/ 07 апреля 2010

Когда вы передаете параметры командной строки, они все передаются как строки, независимо от того, какие типы они могут представлять.Если вы передаете «10» в командной строке, вы фактически передаете массив символов

{ '1', '0', '\0' }

, а не целое число 10.

Если требуемый параметр состоит из одного символа, вы всегда можете просто взять первый символ:

char timer_unit = argv[2][0];
2 голосов
/ 07 апреля 2010

Если вам нужен только первый символ из параметра, следующий извлечет его из строки:

char timer_unit = argv[2][0];

Проблема в том, что argv [2] - это символ * (строка C), а не символ.

0 голосов
/ 07 апреля 2010

Все остается в строках, когда вы передаете их в программу в качестве аргументов, даже если они являются одиночными символами. Например, если ваша программа называлась «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 ++.

0 голосов
/ 07 апреля 2010

Вы, вероятно, не передаете то, что думаете (хотя это должно исходить из командной строки). Пожалуйста, покажите полное сообщение об ошибке и код, но похоже, что вам нужно иметь дело со вторым аргументом в виде char * argv [], а не char argv [] - то есть в виде списка символьных массивов, а не массив из одного символа.

...