Как мы уже разобрались, необходимо использовать для хранения строк массив символов. Никаких фокусов тут нет, и объявление массива символов стандартное.
Листинг 14.1
char str[10];
Но сейчас это просто массив символов, а никакая не строка. Чтобы это стало строкой, необходимо, чтобы последним в массиве символов был символ ‘\0’.
В объявленном выше массиве всего 10 элементов. Если мы будем его использовать для хранения строки, нам стоит учитывать, что один элемент (последний) у нас всегда будет занят, символом конца строки.
После того, как мы объявили массив символов, в нем будет записан мусор. В этом можно убедиться, выполнив следующую программу.
Листинг 14.2
#include <stdio.h>
int main(){
char str[17];
printf("%s\n", str);
return(0);
}
Рис.3. Символьный массив после объявления
Как видите, для вывода строк можно использовать стандартную функцию printf(), для которой предусмотрен специальный спецификатор %s. В остальном никаких отличий здесь нет.
Теперь разберемся, как присвоить значение строке. Есть несколько способов.
Как и любая переменная, строка может быть инициализирована (т.е. ей присвоено некоторое значение) непосредственно при её объявлении.
Листинг 14.3
#include <stdio.h>
int main(){
char str[17]="Hello world";
printf("%s\n", str);
return(0);
}
При таком объявлении и инициализации, все свободные символы, так и останутся заполненными мусором либо обнулятся. Тут в зависимости от компилятора. Вы можете это проверить самостоятельно. Это будет первым заданием для самостоятельного выполнения к этому уроку.
Мы можем не задавать при инициализации размер массива.
Листинг 14.4
#include <stdio.h>
int main(){
char str[]="Hello world";
printf("%s\n", str);
return(0);
}
В этом случае, компилятор сам посчитает количество символов для хранения строки в кавычках, и сам учтет заключительный символ ‘\0’. В данном случае массив str будет из 12 элементов.
Кстати, посмотрите на следующую программу. Она наглядно иллюстрирует, что массив символов, без завершающего ‘\0’ это не строка.
Листинг 14.5
#include <stdio.h>
int main(){
char str[5];
str[0]='a';
str[2]='b';
printf("%s\n", str);
return(0);
}
Результат работы этой программы представлен на следующем рисунке.
Рис. 4. Вывод на экран символьного массива без нулевого элемента в конце
Как можете заметить, вывелись первый символ, потом один символ пропущенный (с мусором), дальше второй символ, сохраненный нами в программе, а дальше пошел неконтролируемый мусор. Не контролируемый потому что непонятно даже, сколько там символов вывелось, но явно не оставшиеся два символа.