Top.Mail.Ru
Arduino - как преоб...
 
Уведомления
Очистить все

[Решено] Arduino - как преобразовать строку String в обычную C-строку (массив char)

 n1ck
(@n1ck)
Level 1

Всем привет, продолжаю мучать строки, подскажите как преобразовать в скетче Arduino строку типа String в "классическую" null-terminated строку. 

Заранее всем спасибо.

Цитата
Создатель темы Размещено : 11.02.2023 21:49
TQFP
 TQFP
(@tqfp)
Level 5

Приветствую, как вариант: c_str() или toCharArray().

ОтветитьЦитата
Размещено : 11.02.2023 22:02
 n1ck
(@n1ck)
Level 1

@tqfp А в чем между ними разница?

ОтветитьЦитата
Создатель темы Размещено : 11.02.2023 22:20
Aveal
(@aveal)
Top level Admin

Доброго времени суток, допустим есть строка:

String testString = "TestString";
const char* pointer = testString.c_str();

Объект типа String базируется на null-terminated C-строке, функция c_str() же просто возвращает указатель на эти данные, не создавая копии исходной строки(!). При этом с const, то есть изменить это значение таким образом не получится. А если модифицировать изначальную строку, то есть testString, то указатель pointer становится недействительным.

Таким образом, c_str() может использоваться, когда нет необходимости модифицировать строку, а нужно просто передать указатель char* в какую-либо другую функцию (как вариант).

Берем второй аналогичный пример:

String testString = "TestString";
char testBuffer[16];
testString.toCharArray(testBuffer, 16);

В итоге по сути будет создана копия(!) исходной строки testString. А точнее копия байтов, являющихся ее основой, и эти скопированные байты будут сохранены в данном случае в массиве testBuffer. Соответственно, далее можно вносить изменения в testBuffer, при этом исходная строка testString останется неизменной.

И если резюмировать кратко:

  • c_str() - возвращает указатель на данные, которые соответствуют исходной строке. Данные не подлежат модификации и никуда не копируются. Просто возвращается указатель и точка.
  • toCharArray() - копирует байты исходной строки в абсолютно с ней не связанный массив, передаваемый в функцию в качестве аргумента.
ОтветитьЦитата
Размещено : 11.02.2023 23:44
 n1ck
(@n1ck)
Level 1

@aveal спасибо, вроде вся ясно теперь.

ОтветитьЦитата
Создатель темы Размещено : 12.02.2023 14:49
Поделиться: