concat()

Метод concat() добавляет значение к строке String и возвращает true или false — в отличие от +=, позволяет проверить, хватило ли памяти.

Полная статья

Описание

concat() присоединяет переданное значение к концу строки типа String. В отличие от оператора +=, этот метод возвращает результат операции — true или false, — что позволяет проверить, удалось ли выделить память под расширенную строку. Если памяти не хватило, исходная строка остаётся без изменений.

Синтаксис

myString.concat(parameter)

Параметры

  • myString: переменная типа String
  • parameter: Разрешенные типы данных: 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).