Всем привет, продолжаю мучать строки, подскажите как преобразовать в скетче Arduino строку типа String в "классическую" null-terminated строку.
Заранее всем спасибо.
Приветствую, как вариант: c_str() или toCharArray().
Доброго времени суток, допустим есть строка:
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() - копирует байты исходной строки в абсолютно с ней не связанный массив, передаваемый в функцию в качестве аргумента.