В языке С++, на котором вы пишете в ArduinoIDE, строки по-умолчанию являются простым массивом алфавитно-циферных символов типа char с завершающим нулевым символом ‘�’.
Объявление
Перед вами – несколько корректных вариантов объявления строки:
Разберём варианты по пунктам:
- Массив объявляется с указание размера, но без указания элементов массива;
- Массив объявляется с размером, строка задаётся побуквенно отдельными символами через запятую, завершающий символ не указывается – компилятор сам добавит его;
- Массив так же объявляется с указанием элементов и размера, нулевой символ добавляется вручную;
- Массив объявляется без явного указания размера, инициализируется строковым значением в двойных кавычках без нулевого символа;
- Массив объявляется с указанием размера, инициализируется строкой;
- Размер массива указывается большим, чем требуется, инициализация – строковой константой.
Нулевой символ
Символ имеет код 0 в стандартной таблице кодировки. Символ закрывает собой строку (байты данных, указанные после него, в строку входить фактически не будут). Используется для определения конца строки функциями ввода-вывода (например, Serial.println() после нулевого символа напечатает еще и символ перевода каретки).
Теоретически, можно не включать нулевой символ в массив и задать размер, равный длине строки в байтах, но, так как подобные функции ввода-вывода считывают/выводят поток в цикле до появления нулевого символа, то при определенных условиях контроллер может не выйти из цикла.
Кавычки
Строки, объекты строк и строковые константы всегда задаются в двойных кавычках. Символы, из которых складывается строка – в одинарных.
Особенности инициализации длинных строк
Длинные строки (для увеличения читаемости кода) могут быть инициализированы следующим образом:
1 2 3 |
char myString[] = "This is the first line" " this is the second line" " etcetera"; |
Массивы с элементами типа «строка»
При создании меню, локализации приложений или просто для удобства написания кода строки можно заключить в массив строк, таким образом, массив будет хранить массивы (двумерный массив).
Так как передать аргументом можно лишь один параметр, то при работе со строками основным параметром является указатель на строку – его типом будет char* (* означает то, что это не переменная, а указатель на переменную, фактически, её адрес в памяти микроконтроллера).
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3", "This is string 4", "This is string 5","This is string 6"}; void setup(){ Serial.begin(9600); } void loop(){ for (int i = 0; i < 6; i++){ Serial.println(myStrings[i]); delay(500); } } |