Функции строк в C++: strcpy, strcat, strlen, strcmp — практические примеры
Что такое строка?
Строка — это последовательность символов. В современном C++ обычно работают с объектами класса std::string, который автоматически управляет памятью, изменением размера и предоставляет богатый набор методов. Это устраняет необходимость ручного управления буферами и снижает риск переполнения.
В учебных целях C++ всё ещё поддерживает классические C-строки — нуль-терминированные массивы символов. Оба подхода имеют своё место: std::string для повседневного программирования, C-строки — для работы с legacy API или производительностно-критичным низкоуровневым кодом.
Объявление строк
- C-строка (массив char): одномерный массив
char, завершающийся нуль-символом (\0). - std::string: класс из стандартной библиотеки C++ с богатым интерфейсом манипуляций строками.
C-строка
Пример:
char name[5] = {'J', 'o', 'h', 'n', '\0'};
Или компактнее:
char name[] = "John"; // компилятор сам добавит завершающий '\0'
std::string
Для использования std::string подключите заголовочный файл и объявите переменную:
#include <string> std::string name = "John";
Доступ к значениям строк
Ниже — простая консольная программа, выводящая C-строку и std::string.
#include <iostream>
#include <string>
using namespace std;
int main() {
char cName[5] = "John"; // C-строка
string cppName = "Guru99"; // std::string
cout << "C-style string: " << cName << endl;
cout << "std::string: " << cppName << endl;
return 0;
}
Вывод:

Основные функции для C-строк
Эти функции определены в заголовочном файле cstring. Они работают с C-строками (нуль-терминированными массивами char).
strcpy()
Копирует исходную строку в буфер назначения. Буфер назначения должен быть достаточно велик.
strcpy(dest, src); // dest должен иметь достаточно места
strcat()
Дописывает исходную строку в конец строки назначения. Буфер назначения должен вмещать результат.
strcat(dest, src); // dest должен иметь достаточно места
strlen()
Возвращает количество символов в строке, исключая завершающий нуль-байт.
size_t len = strlen(str);
strcmp()
Лексикографически сравнивает две строки. Возвращает 0, если равны, отрицательное — если первая меньше, положительное — если первая больше.
int cmp = strcmp(str1, str2);
Практический пример
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char name1[10] = "Guru99";
char name2[10] = "John";
char name3[20]; // достаточно для конкатенации
// Копирование
strcpy(name3, name1);
cout << "strcpy(name3, name1): " << name3 << endl;
// Конкатенация
strcat(name1, name2);
cout << "strcat(name1, name2): " << name1 << endl;
// Длина
size_t len = strlen(name1);
cout << "strlen(name1): " << len << endl;
// Сравнение
int cmp = strcmp(name1, name3);
cout << "strcmp(name1, name3): " << cmp << endl;
return 0;
}
Вывод:

Основные выводы
- Используйте
std::stringдля большинства C++ кода — это безопаснее и проще. - При работе с сырыми массивами символов функции
cstringнезаменимы. - Всегда обеспечивайте достаточный размер буфера назначения, чтобы избежать переполнения.
strlenнужен только для C-строк; дляstd::stringпредпочтительнееsize().- Для современного C++ лучше
std::string::compare()или перегруженныйoperator==вместоstrcmp.
Язык C
- Освоение строк в Java: создание, методы и лучшие практики
- Строковые представления в Java Enums: настройка toString() и лучшие практики
- Переменные и типы данных в C++: подробное руководство по int, double, char, string, bool
- Массивы в C++: объявление, инициализация и работа с указателями
- Цикл do-while в C++: синтаксис, примеры и вложенные циклы
- Указатели в C++: концепции, примеры и практические применения
- Тип данных char в C++: объявление, ASCII и методы преобразования
- Перегрузка операторов в C++: практическое руководство с примерами кода
- Функции в C++: подробное объяснение с практическими примерами кода
- Строки в C просто: объявление, ввод, вывод и библиотечные функции