Нуль-терминированная строка
Материал из Википедии — свободной энциклопедии
Нуль-терминированная строка или C-строка (от названия языка Си) — это способ представления строк в памяти компьютера, при котором конец строки отмечает специальный нуль-символ (код ASCII 0x00). Например, в строковом буфере (области памяти, выделенной для хранения строки) нуль-терминированная строка «СТРОКА» может представляться следующим образом:
С | Т | Р | О | К | А | NUL | F | % | q | 4 |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x71 | 0x34 |
Символы после нуль-символа называются мусором — это случайные данные, которые могли остаться в буфере от предыдущих строк или от других использований памяти.
При использовании однобайтных кодировок (ASCII) объём памяти, требуемый для представления строки из N символов, равен N + 1 байт. В том случае, когда для кодирования символов применяется Юникод, длина строки зависит от используемого представления Юникода (например, 2N + 1 байт для UCS-2).
Такие строки являются стандартом в Си и некоторых других языках программирования. Поскольку они используются для передачи строковых аргументов в стандартные функции во многих операционных системах, операции для работы с нуль-терминированными строками появились в Паскале и других языках.
Для ссылки на нуль-терминированную строку применяется указатель на первый её символ. Это простой, быстрый и гибкий подход, но чреватый ошибками. Программист постоянно должен следить за своим кодом, а именно:
- быть уверенным, что не случаются переполнения буфера;
- если на одну строку есть несколько ссылок, убедиться, что изменение или уничтожение этой строки не приведёт к нарушению работы программы;
- высвобождать память, занятую строкой, как только она больше не нужна, и наоборот, не высвобождать, если строка ещё требуется.
Кроме того, некоторые операции со строками, например, конкатенация, для нуль-терминированных строк выполняются медленнее, чем для других типов строк.
Альтернативой нуль-терминированным строкам является способ, принятый в Паскале: строка начинается с первого элемента массива, а в нулевом элементе хранится длина строки. В этом случае не требуется специального терминатора для обозначения конца строки. С другой стороны, здесь на длину строки накладывается ограничение, связанное с вместимостью нулевого элемента массива, то есть в случае с однобайтовыми элементами длина строки не может превышать 255 символов. Нуль-терминированные строки такому ограничению не подвержены и теоретически могут хранить строки любой длины.
[править] В языке Си
Для работы с нуль-терминированными строками в языке программирования Си используется ряд функций:
- strcpy, wcscpy — копирование строк;
- strlen, wcslen — вычисление длины строки;
- strchr — поиск символа в строке;
- strdup — дублирование строк;
- strstr — поиск подстроки.