Как вы используете Atoi для назначения отдельных элементов массива символов? - PullRequest
7 голосов
/ 15 июля 2010

Итак, как мы все, наверное, знаем, atoi преобразует символ в число. Но что делать, если вам нужен только один из элементов массива вместо всего массива?

Пожалуйста, посмотрите на следующее:

for (h = 0; h < 5; h++)
{
    num[h] = atoi(temp[h]);
}

Предположим, что num - это массив типа int, а temp - это массив типа char. Это дает мне одну из тех раздражающих проблем с конверсией:

Неверное преобразование из 'char' в 'const char *'

Любые предложения о том, как преобразовать отдельный элемент массива char в int с помощью atoi?

Ответы [ 2 ]

13 голосов
/ 15 июля 2010

Если вы хотите преобразовать только один символ, вам не нужно использовать atoi():

if (temp[h] >= '0' && temp[h] <= '9')
{
    num[h] = temp[h] - '0';
}
else
{
    // handle error:  character was not a digit
}

В C значение каждой цифры на единицу больше, чем значение предыдущей цифрытак что это гарантированно сработает.

Причина, по которой atoi() не работает, заключается в том, что в качестве аргумента он принимает const char*, а не char.Этот указатель должен указывать на завершенную нулем строку.

5 голосов
/ 15 июля 2010

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

char buf[2] = { temp[h], '\0' };
num[h] = atoi(buf);
...