Недопустимый аргумент типа унарного ‘*’ - PullRequest
1 голос
/ 27 марта 2012

У меня проблема с моим кодом Arduino C ++.Вот функция:

  void sendDeviceName(){
  char buffer[3] = "";
  incomingCommand.toCharArray(buffer, 3);
  int deviceNumber = atoi(*buffer[2]);
  Serial.println(EEPROMreadDevice(deviceNumber));
}

Когда я пытаюсь скомпилировать, мой компилятор кода возвращает:

ошибка: недопустимый аргумент типа унарного '*'

Я пытался исправить это самостоятельно, но я не иду.

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

buffer[2] - это char, а не char *, поэтому вы не можете разыменовать его.

2 голосов
/ 27 марта 2012

Ошибка связана с тем, что buffer[2] является char, а не указателем.Здесь нет ничего для разыменования.Если вы пытаетесь превратить символ char, представляющий цифру, в соответствующее значение int, используйте:

int deviceNumber = buffer[2] - '0';

Или, как правило, если вы хотите использовать последние NK-символы массива char, используйте:

int deviceNumber = atoi(buffer + K);

так в вашем случае:

int deviceNumber = atoi(buffer + 2);
1 голос
/ 27 марта 2012

Я пытался исправить это самостоятельно, но я не иду.

Ну, выражение buffer[2] имеет тип char.Вы не можете разыменовать char.Возможно, вы имели в виду ...

buffer + 2

, что эквивалентно

&buffer[2]

?

Это скомпилируется, но в качестве аргумента atoi это неправильно: *Для 1017 * требуется строка с нулевым символом в конце, которая содержит хотя бы одну цифру, а указатель на последний элемент buffer в лучшем случае может быть указателем на завершающий нулевой байт (без цифр).

Возможно, это то, что вы намеревались:

atoi( buffer )

Или, если вам нужна цифра, которая хранится в индексе 2:

buffer[2] - '0'

(C ++ гарантирует, что коды символов десятичных цифр являются последовательными).

Или, если это значение char является прямым целочисленным значением:

buffer[2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...