concat()
Метод concat() добавляет значение к строке String и возвращает true или false — в отличие от +=, позволяет проверить, хватило ли памяти.
Полная статья
Описание
concat() присоединяет переданное значение к концу строки типа String. В отличие от оператора +=, этот метод возвращает результат операции — true или false, — что позволяет проверить, удалось ли выделить память под расширенную строку. Если памяти не хватило, исходная строка остаётся без изменений.
Синтаксис
myString.concat(parameter)
Параметры
myString: переменная типаStringparameter: Разрешенные типы данных:String,string,char,byte,int,unsigned int,long,unsigned long,float,double,__FlashStringHelper(F()макрос)
Возвращает
true: успехfalse: сбой (в этом случае строка остается неизменной)
Поддерживаемые типы параметра
Метод умеет принимать значения самых разных типов и автоматически преобразует их в текст перед добавлением:
Stringиstring(C-строка, то естьchar-массив)- Целые числа:
int,unsigned int,long,unsigned long,byte - Числа с плавающей точкой:
float,double - Строки из флеш-памяти через макрос
F()— тип__FlashStringHelper
Числа с плавающей точкой (float, double) преобразуются с двумя знаками после запятой.
Где применяется
- Сборка строки для отправки по Serial — когда нужно объединить текст, показания датчика и единицы измерения в одно сообщение.
- Формирование HTTP-запроса или команды — последовательное добавление частей строки перед отправкой через
WiFiClientилиSerial. - Контролируемое добавление с проверкой памяти — в отличие от
+=,concat()позволяет обработать ситуацию, когда памяти для расширения строки не хватило. - Работа со строками во флеш-памяти — использование макроса
F()экономит оперативную память на платах с ограниченным объёмом ОЗУ.
Практические замечания
- Каждый вызов
concat()может запрашивать выделение новой памяти в куче. На платах с небольшим объёмом ОЗУ (например, Arduino Uno с 2 КБ) частые конкатенации в цикле могут вызвать фрагментацию памяти и нестабильную работу скетча. - Если метод вернул
false, строкаmyStringне изменилась — это полезно для отладки: можно вывести сообщение об ошибке черезSerial.println(). - Для добавления строковых литералов предпочтительно использовать
F(), чтобы хранить их во флеш-памяти, а не в ОЗУ:myString.concat(F("текст")). - Оператор
+=и методconcat()делают одно и то же, но+=не возвращает статус операции. Если важно знать, успешно ли добавлено значение, используйтеconcat(). floatиdoubleвсегда добавляются с двумя знаками после запятой. Если нужна другая точность, предварительно преобразуйте число в строку с помощьюString(value, digits).