Описание
Текстовые строки могут быть объявлены двумя способами: можно использовать тип данных String, который входит в ядро, начиная с версии 0019; либо объявить строку как массив символов char с нулевым символом в конце. На этой странице описан второй способ. Для получения более подробной информации об объекте String, предоставляющем больше возможностей ценой большего расхода памяти, см. страницу String — объект.
Примеры
Ниже представлены примеры правильного объявления строк.
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
Допускаемые операции при объявлении строк
- Объявить массив символов без его инициализации (Str1)
- Объявить массив символов с одним избыточным элементом, компилятор сам добавит требуемый нулевой символ (Str2)
- Добавить нулевой символ явно (Str3)
- Инициализировать массив с помощью строковой константы, заключенной в кавычки; компилятор создаст массив необходимого размера с нулевым символом в конце (Str4)
- Инициализировать массив с помощью строковой константы, явно указав его размер (Str5)
- Инициализировать массив избыточного размера, оставив место для более длинных строк (Str6)
Нулевой завершающий символ
Как правило, все строки завершаются нулевым символом (ASCII код 0), который позволяет функциям (подобным Serial.print()) определять длину строки. Без этого символа они продолжали ли бы последовательно считывать байты памяти, которые фактически уже не являлись бы частью строки.
По сути, это означает, что длина вашей строки должна быть на 1 символ больше, чем текст, который вы хотели бы в ней хранить. Именно поэтому Str2 и Str5 должны быть длиной 8 символов, несмотря на то, что слово «arduino» занимает всего 7 — последняя позиция автоматически заполняется нулевым символом. Размер Str4 автоматически станет равным 8 — один символ требуется для завершающего нуля. В строке Str3 мы самостоятельно указали нулевой символ (обозначается ‘\0’).
Следует иметь в виду, что в целом можно объявить строку и без завершающего нулевого символа (например, если задать длину Str2 равной 7, а не 8). Однако это приведет к неработоспособности большинства строковых функций, поэтому не следует намеренно так делать. Такая ошибка может быть причиной странного поведения или появления сторонних символов при работе со строками.
Одинарные или двойные кавычки?
Строки всегда объявляются в двойных кавычках («Abc»), а символы всегда объявляются в одинарных кавычках (‘A’).
Перенос длинных строк
Длинные строки можно переносить так:
char myString[] = "This is the first line"
" this is the second line"
" etcetera";
Массивы строк
При работе с большими объемами текста (например, в проектах, работающих с LCD-экраном) часто удобно использовать массивы строк. Поскольку строки сами по себе являются массивами, то фактически, это — пример двумерного массива.
В нижеследующей программе звездочка после указания типа данных char «char*» показывает, что переменная является массивом «указателей». Все имена массивов фактически являются указателями, поэтому звездочка необходима для создания массива массивов. Указатели в C — одна из наиболее сложных вещей для начинающих, но в данном случае глубокого понимания указателей для их эффективного использования вовсе не требуется.
Пример
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);
}
}