Как преобразовать тип одного элемента из массива?

Использовал такой метод:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  char gar[3] = { '3', '6', '9' };
  int far = atoi(gar[0]);
  printf( "%d", far);

  return 0;
}

выдаёт ошибку

assignment makes pointer from integer without a cast

Но даже с переводом я не понял, что это значит и как это исправить.

Если массив gar одноэлементный, то код работает правильно и выводит на экран цифру 3.

Что делаю не так и какие ещё есть способы решения этой задачи?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

atoi работает со строкой. Один символ туда передавать нельзя. Надо передавать указатель на строку - массив символов, завершающийся нулём.

Например buffer - строка из двух символов. Первый - пробел, второй - '\0'. В первый символ кладётся цифра из массива, весь буфер передаётся в atoi:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char gar[] = {'3', '6', '9'};
    char buffer[] = " ";
    buffer[0] = gar[0];
    printf("%d\n", atoi(buffer));
}

P.S. Способ из комментария (gar[0] - '0') не костыльный. Язык гарантирует, что это будет работать везде и очень быстро. Обычно его и применяют.

→ Ссылка