Строки
Строка – это одномерный массив символов, заканчивающийся нулевым символом.
В языке С признаком окончания строки служит символ '\0'. При объявлении массива символов, предназначенного для хранения строки, необходимо отвести одно место для нуля, т.е. для символа окончания строки '\0'. Например, если дана строка qwerty, в которой 6 символов, каждый из которых занимает в памяти 1 байт, то при инициализации такой строки необходимо отвести 1 байт для нулевого символа. Поэтому следует сделать объявление строки для семи символов:
char str[7] = "qwerty";
Альтернативным объявлением может служить безразмерная инициализация:
char str[ ] = "qwerty";
При этом в случае определения длины строки результатом будет число 6. Размер строки не изменится, если в ней указать символ окончания строки:
char str[ ] = "qwerty\0";
Для одномерных массивов общий размер массива в байтах вычисляется по формуле:
всего байт = размер типа в байтах * количество элементов
Пример 1. Напишите программу определения длины заданных строк и их распечатки, а также определения размера строк в байтах.
Для решения поставленной задачи применим библиотечную функцию strlen() и оператор sizeof.
Программный код решения примера:
#include <stdio.h> #include <conio.h> #include <string.h> int main (void) { char str[] = {'A','B','C','D','\0'}; char str2[] = "hello, world\0"; printf("\n\t The lines are:\n\n\t "); puts(str); printf("\t "); // Для отступа от края дисплея puts(str2); printf("\n\t The length of the 1st line (%s) is: %i\n", str, strlen(str)); printf("\t The size of the memory of the 1st line (%s) is: %i\n", str, sizeof str); printf("\n\t The length of 2-nd line (%s) is: %i\n", str2, strlen(str2)); printf("\t Memory size 2-nd line (%s) is: %i\n", str2, sizeof str2); printf("\n Press any key: "); _getch(); return 0; }
Задание 1
В строке str2[] уберите символ завершения строки. Проанализируйте и объясните результат.
Вместо функций puts() примените функции printf().
Задайте явную инициализацию строк как одномерных массивов. Сравните результаты длины и размерности строк.
При явной инициализации одномерных массивов в заданных строках не указывайте символы конца строки. Проанализируйте результат выполнения программы.
Напишите программу циклического заполнения символьного массива, соответствующего фамилии пользователя (студента).
Определите размерности типов: char, int, float, double, long int, long double, long long int. Выполните в цикле при использовании оператора типа переключатель.
Пример 2. Напишите программу копирования одной заданной строки в другую.
Для решения используйте библиотечную функцию strcpy(), для которой подключите заголовок <string.h>.