string

Описание

Текстовые строки могут быть представлены двумя способами. Можно использовать тип данных String или сделать строку из массива типа char и завершить её нулевым символом. На этой странице описан второй способ. Подробности об объекте String, который даёт больше функциональности ценой большего расхода памяти, см. на странице String object.

Синтаксис

Все следующие объявления являются допустимыми объявлениями строк.

  • 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 без его инициализации, как в Str1.

  • Объявить массив char (с одним дополнительным символом), и компилятор добавит требуемый нулевой символ, как в Str2.

  • Явно добавить нулевой символ, как в Str3.

  • Инициализировать строковой константой в кавычках; компилятор подберёт размер массива, чтобы вместить строковую константу и завершающий нулевой символ, как в Str4.

  • Инициализировать массив с явным размером и строковой константой, как в Str5.

  • Инициализировать массив, оставляя дополнительное место для большей строки, как в Str6.

Завершение нулевым символом

В общем случае строки завершаются нулевым символом (ASCII-код 0). Это позволяет функциям (например, Serial.print()) определять, где находится конец строки. Иначе они продолжали бы читать последующие байты памяти, которые на самом деле не являются частью строки.

Это означает, что в строке должно быть место для одного дополнительного символа сверх текста, который вы хотите в ней разместить. Вот почему Str2 и Str5 должны быть длиной восемь символов, хотя «arduino» содержит только семь — последняя позиция автоматически заполняется нулевым символом. Размер Str4 будет автоматически установлен в восемь символов, один — для дополнительного нулевого. В Str3 мы явно включили нулевой символ (записанный как \0) сами.

Обратите внимание, что возможно иметь строку без финального нулевого символа (например, если бы вы указали длину Str2 равной семи вместо восьми). Это нарушит работу большинства функций, использующих строки, поэтому не следует делать это намеренно. Однако если что-то ведёт себя странно (работает с символами, не входящими в строку), это может быть проблемой.

Одинарные или двойные кавычки?

Строки всегда определяются внутри двойных кавычек («Abc»), а символы — внутри одинарных кавычек (A).

Перенос длинных строк

Можно переносить длинные строки следующим образом:

char myString[] = "This is the first line"
" this is the second line"
" etcetera";

Массивы строк

Часто бывает удобно при работе с большим количеством текста, например в проекте с ЖК-дисплеем, настроить массив строк. Поскольку сами строки являются массивами, это на самом деле пример двумерного массива.

В коде ниже звёздочка после типа данных

char

«

char*

» указывает на то, что это массив «

pointers

» (указателей). Все имена массивов на самом деле являются указателями, поэтому это требуется для создания массива массивов. Указатели — одна из более эзотерических частей 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);
  }
}

Смотрите также