Строки в C: объявление, инициализация и ввод-вывод
Строки в программировании на C
Это руководство проведет вас через основы строк в C: объявление, инициализацию, ввод/вывод, использование функций, указателей и основных библиотечных функций.
В C строка — это массив символов, оканчивающийся нуль-байтом \0. Например:
char c[] = "c string";
Компилятор автоматически добавляет \0 к строковому литералу, делая его корректной строкой C.

Как объявить строку?
Строки объявляются как массивы символов. Например:
char s[5];

Это объявляет буфер, вмещающий до 4 символов плюс завершающий \0.
Как инициализировать строки?
Доступно несколько стилей инициализации:
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};

Берегитесь переполнения буфера: char c[5] = "abcde"; пытается записать шесть символов (включая \0) в массив из пяти байт — этого следует избегать.
Присваивание значений строкам
Массивы нельзя присваивать после объявления. Вместо этого используйте strcpy():
char c[100];
strcpy(c, "C programming");
Примечание: Прямое присваивание вроде c = "C programming"; вызывает ошибку компиляции.
Чтение строк от пользователя
Используйте scanf() для ввода, разделенного пробелами:
#include <stdio.h>
int main() {
char name[20];
printf("Enter name: ");
scanf("%s", name);
printf("Your name is %s.", name);
return 0;
}
Вывод
Enter name: Dennis Ritchie Your name is Dennis.
Захватывается только первое слово, потому что scanf() останавливается на пробеле. Имя массива преобразуется в указатель, поэтому name передается напрямую.
Как прочитать целую строку?
Используйте fgets() и puts():
#include <stdio.h>
int main() {
char name[30];
printf("Enter name: ");
fgets(name, sizeof(name), stdin);
printf("Name: ");
puts(name);
return 0;
}
Вывод
Enter name: Tom Hanks Name: Tom Hanks
fgets() читает до sizeof(name)-1 символов, включая пробелы. Она также сохраняет завершающий символ новой строки, который puts() выводит.
Примечание: gets() устарела и исключена из стандарта C, так как может вызвать переполнение буфера.
Передача строк в функции
Строки передаются в функции так же, как массивы. Пример:
#include <stdio.h>
void displayString(char str[]);
int main() {
char str[50];
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
displayString(str);
return 0;
}
void displayString(char str[]) {
printf("String Output: ");
puts(str);
}
Строки и указатели
Имена строк преобразуются в указатели, позволяя использовать арифметику указателей:
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // H
printf("%c", *(name+1)); // a
printf("%c", *(name+7)); // o
char *namePtr = name;
printf("%c", *namePtr); // H
printf("%c", *(namePtr+1)); // a
printf("%c", *(namePtr+7)); // o
}
Часто используемые строковые функции
- strlen() — возвращает длину строки (без учета нуль-терминатора).
- strcpy() — копирует одну строку в другую.
- strcmp() — лексикографически сравнивает две строки.
- strcat() — конкатенирует две строки.
Язык C
- Строки в C#: основы, операции и продвинутые техники
- Освоение пространств имен в C#: организация, область видимости и лучшие практики
- Как передавать массивы в функции в C++: практическое руководство
- Освоение строк в Java: создание, методы и лучшие практики
- Строковые представления в Java Enums: настройка toString() и лучшие практики
- Функции строк в C++: strcpy, strcat, strlen, strcmp — практические примеры
- Строки в C просто: объявление, ввод, вывод и библиотечные функции
- Освоение строковых операций в Python: replace, join, split, reverse, преобразование регистра
- Освоение программирования на C: подробное руководство для начинающих
- Класс String в Java: создание, манипуляции и основные методы