Строки как массивы char
Часть раздела Logic & Flow путешествия по C на Coddy — урок 12 из 63.
В языке C нет встроенного типа данных для строк, подобного тем, что встречаются в других языках программирования. Вместо этого строки представляются как массивы символов. Эта фундаментальная концепция необходима для понимания того, как обрабатывается текст в программировании на C.
Строка в языке C — это просто последовательность символов, хранящихся в последовательных ячейках памяти. Чтобы создать строку, вы объявляете массив символов, размер которого достаточен для хранения всех необходимых символов, плюс одно дополнительное место для специального завершающего символа.
char greeting[6]; // Может содержать 5 символов + терминатор
char message[20]; // Может содержать до 19 символов + терминаторСамый удобный способ работы со строками — инициализировать их напрямую с помощью строкового литерала при объявлении массива. C автоматически берет на себя детали хранения каждого символа в массиве:
char greeting[6] = "Hello";
// Здесь хранятся: 'H', 'e', 'l', 'l', 'o', плюс специальный завершающий символВы также можете позволить C автоматически определить размер массива, опустив указание размера при инициализации строковым литералом:
char greeting[] = "Hello"; // C автоматически устанавливает размер 6Понимание того, что строки являются массивами символов, имеет решающее значение, так как это объясняет, как C обрабатывает текстовые данные, и подготавливает вас к работе с функциями манипуляции строками, которые работают с этими массивами символов.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует создание и работу с символьными массивами для хранения строк. Ваша программа должна:
- Объявить символьный массив с именем
greeting, имеющий достаточно места для хранения строки "Hello" (не забудьте учесть нулевой терминатор) - Инициализировать массив
greetingстроковым литералом "Hello" - Объявить второй символьный массив с именем
messageиз 20 элементов - Инициализировать массив
messageстроковым литералом "Welcome" - Объявить третий символьный массив с именем
wordбез указания размера, позволив C автоматически определить размер путем инициализации строкой "Programming" - Вывести все три строки с помощью
printf, используя спецификатор формата%s - Вывести размер каждого массива с помощью
sizeof, чтобы продемонстрировать, сколько памяти занимает каждый символьный массив
Ваш вывод должен отображать результаты в следующем формате:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12Эта задача проверяет ваше понимание того, как объявлять символьные массивы для хранения строк, как строковые литералы автоматически завершаются нулевым символом при присвоении символьным массивам и как C автоматически вычисляет размеры массивов, если вы опускаете указание размера при инициализации.
Шпаргалка
В языке C строки представляются как массивы символов. Встроенного типа данных для строк не существует.
Объявление символьного массива с указанным размером:
char greeting[6]; // Может содержать 5 символов + терминатор
char message[20]; // Может содержать до 19 символов + терминаторИнициализация строковым литералом:
char greeting[6] = "Hello";
// Здесь хранятся: 'H', 'e', 'l', 'l', 'o', плюс специальный терминаторПозвольте C автоматически определить размер массива:
char greeting[] = "Hello"; // C автоматически устанавливает размер 6Вывод строк с использованием спецификатора формата %s:
printf("%s", greeting);Получение размера массива с помощью sizeof:
sizeof(greeting) // Возвращает общее количество байтов, занимаемых массивомПопробуйте сами
#include <stdio.h>
int main() {
// TODO: Напишите свой код здесь
// Объявите и инициализируйте массивы символов, как указано в задании
// Выведите строки и их размеры
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции