Что такое C-строка?

«Что такое C-строка?» — вопрос из категории C++ Core, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

C-строка — это массив элементов типа char, завершающийся нуль-терминатором (''). Это низкоуровневое представление строки, унаследованное из языка C и широко используемое в C++ для совместимости и работы с системными API.

Ключевые характеристики:

  • Длина строки определяется позицией первого нуль-символа, а не размером массива.
  • Не хранит свою длину отдельно, что требует её вычисления за O(n) с помощью strlen.
  • Подвержена ошибкам переполнения буфера, если операции не контролируют границы массива (например, strcpy, sprintf).

Пример объявления и использования:

// Строковый литерал неявно создаёт массив char с нуль-терминатором
const char* greeting = "Hello"; // Массив: {'H','e','l','l','o',''}

// Массив, инициализированный строковым литералом
char buffer[20] = "Hello"; // Оставшиеся элементы инициализируются ''

// Ручное формирование C-строки
char path[256];
strcpy(path, "/home/user/");
strcat(path, "file.txt"); // path теперь содержит "/home/user/file.txt"

Сравнение с std::string: В современном C++ для работы со строками предпочтительнее использовать std::string из <string>, который управляет памятью, хранит длину и предоставляет безопасный интерфейс. C-строки необходимы при взаимодействии с C-библиотеками, системными вызовами или API, ожидающими const char*.