Menu
Coddy logo textTech

Строки как массивы 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 обрабатывает текстовые данные, и подготавливает вас к работе с функциями манипуляции строками, которые работают с этими массивами символов.

challenge icon

Задание

Легко

Напишите программу на языке C, которая демонстрирует создание и работу с символьными массивами для хранения строк. Ваша программа должна:

  1. Объявить символьный массив с именем greeting, имеющий достаточно места для хранения строки "Hello" (не забудьте учесть нулевой терминатор)
  2. Инициализировать массив greeting строковым литералом "Hello"
  3. Объявить второй символьный массив с именем message из 20 элементов
  4. Инициализировать массив message строковым литералом "Welcome"
  5. Объявить третий символьный массив с именем word без указания размера, позволив C автоматически определить размер путем инициализации строкой "Programming"
  6. Вывести все три строки с помощью printf, используя спецификатор формата %s
  7. Вывести размер каждого массива с помощью 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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow