String

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

string

Описание

Текстовые строки могут представлены двумя способами. Вы можете использовать тип String, который был введен с версии 0019 или же манипулировать массивом символов с закрывающим нулем. На этой странице рассматривается последний способ. Для подробной информации по объекту 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', '\0'};
  char Str4[ ] = "arduino";
  char Str5[8] = "arduino";
  char Str6[15] = "arduino";
  • Str1: объявление массива символов без инициализации;
  • Str2: объявление массива символов (с одним дополнительным) - компилятор добавит закрывающий нулевой символ;
  • Str3: явное добавление нулевого закрывающего символа;
  • Str4: инициализация строковой константой в двойных кавычках; компилятор автоматически выставит размер массива, соответствующей длине константы с учетом закрывающего нулевого символа
  • Str5: инициализация строковой константой, с явным указанием размера строки;
  • Str6: инициализация строковой константой, с распределением места с запасом (для более длинной строки).

Закрытие нулем

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

Это означает, что ваша строка нуждается в месте для хранения на один байт больше, чем суммарная длина текста в символах. Это и есть та причина, по которой переменные Str2 и Str5 имеют размер 8, в то время как "arduino" требует только семь. Последняя позиция автоматически заполняется нулевым символом. Str4 получает размер автоматически, в то время как в Str3 мы явно указываем нулевой символ частью строки.

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

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

Строковые значения всегда определяются в двойных кавычках ("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);
   }
}

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.