strcat выдает ошибку, когда я пытаюсь добавить символ в массив символов

c++

У меня есть

char c;

где

int bt_available = Serial2.available();
if (bt_available) {
  c = Serial2.read();
}

и далее в коде я пытаюсь

strcat(some_char_array, c);

и выдает эту ошибку

инициализация аргумента 2 функции 'char* strcat(char*, const char*)' [-fpermissive]
ошибка: неверное преобразование из 'char' в 'const char*' [-fpermissive]

Наилучшее предположение, почему возникает ошибка, заключается в том, что strcat может принимать только строки и массивы символов, но не отдельные символы, поэтому решение, которое я могу придумать, состоит в том, чтобы создать массив символов, например char test[1] где test[1] = '\0', а затем test[0] = c, но я не уверен, что это лучший способ проблема и если это решение. Означает ли «const char*» «char []»?

PS Я читал блог Majenko, и я превращаю все строки в массивы символов, и это немного мучает: P

, 👍0


1 ответ


Лучший ответ:

1

char — это одиночный символ. char * и char[] — это массивы символов (более правильно char * — это указатель на массив символов).

strcat предполагает наличие двух массивов или указателей на массивы символов. Если вы хотите добавить один символ, вы можете либо обмануть компилятор, заставив его думать, что этот символ представляет собой массив символов размера 1 (но в нем отсутствует требуемое завершение NULL), либо вручную манипулировать целевым массивом.

В первом случае вы можете использовать strncat и приведение:

strcat(some_char_array, &c, 1);

Это дает вам указатель на символ, который с точки зрения компилятора неотличим от указателя на массив символов. Вы используете вариант "n" strcat, чтобы ограничить его одним символом (плюс добавленный символ NULL), чтобы он не полагался на отсутствующее завершение NULL.

Для второго вы могли бы сделать:

int n = strlen(some_char_array);
some_char_array[n] = c;
some_char_array[n+1] = 0;

Это просто устанавливает N-й символ в целевом массиве на то, что находится в c, а затем добавляет в конец новый символ завершения NULL.

,