Как использовать atoi() для преобразования элемента массива char в int?

Вот код:

char *P_char = malloc(sizeof(char)*10);

int i = 0;

for(i; i < 10; i++)
{
    P_char[i] = (char)(i + 48);
}

и вот некоторые из кодов, которые я пробовал, чтобы использовать atoi

printf("The int result is: %d", atoi(P_char[4]));

и

int converted = atoi(P_char[4]);
printf("The int result is: %d", converted );

и

const char x = P_char[4];
int converted = atoi(x);
printf("The int result is: %d", converted );

Но все еще не работает. Я не мог выяснить, не следует ли atoi() использовать для указателей. Есть ли такой факт?

ПРИМЕЧАНИЕ: когда я говорю, что не работает, я имею в виду, что программа завершает работу с кодом ошибки, а не выполняется до конца.


person ozgur    schedule 14.08.2015    source источник
comment
вы пытаетесь преобразовать char в целое число, но вам нужно передать char*   -  person Iłya Bursov    schedule 14.08.2015
comment
поставь &P_char[4] но может работать не так как ты ожидаешь. кажется, вы пытаетесь преобразовать один char в int.   -  person Jason Hu    schedule 14.08.2015
comment
Вы читали man-страницу atoi? atoi преобразует строку в целое число, а не char в целое число. char в целое просто требует кастинга...   -  person Ayman Khamouma    schedule 14.08.2015
comment
См. документацию по atoi() здесь.   -  person WhozCraig    schedule 14.08.2015
comment
Какое значение вы ожидаете получить? Если вы хотите получить числа от 48 до 58, вам нужно только распечатать их с помощью %d. char и int отличаются только размером. char может содержать 2 ^ 8 различных чисел, а int может содержать 2 ^ 32, но оба они используются для хранения целых значений.   -  person Mateo Hrastnik    schedule 14.08.2015
comment
@MattHammond Я понял. теперь я думаю, что я держу правое ухо левой рукой.   -  person ozgur    schedule 14.08.2015


Ответы (2)


Если у вас есть такое заявление

const char x = P_char[4];

затем вывести цифру, хранящуюся в x, как целое число, вы можете следующим образом

printf("The int result is: %d", x - '0' );

Что касается функции atoi, то она применяется к строкам, а не к одному символу.

person Vlad from Moscow    schedule 14.08.2015
comment
Итак, аргумент atoi() должен заканчиваться нулем? всегда? - person ozgur; 14.08.2015
comment
@ozgur Да, ты прав. Хотя это может быть применено к строкам, которые также содержат альфа-символы. Например, применяется к 10abc; atoi вернет 10. - person Vlad from Moscow; 14.08.2015
comment
Последний вопрос. Я получаю массив символов из консольного приложения. Мне нужно получить из него целые числа. Так что у меня нет строки типа xyz213 в руке. У меня есть массив символов. В этом случае можно использовать atoi()? - person ozgur; 14.08.2015
comment
@ozgur Покажите, какая у вас строка и какие целые числа вы собираетесь получить. - person Vlad from Moscow; 14.08.2015

Функция atoi используется для преобразования строки C в число. Объявлено так:

int atoi(const char *nptr);

Вы указываете значение char в качестве параметра. Вместо этого вы должны использовать что-то вроде этого:

const char *s = "4711";
int i = atoi(s)
person Sleafar    schedule 14.08.2015