Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Нуль-терминированная строка

Из Википедии — свободной энциклопедии

Нуль-терминированная строка или C-строка (от названия языка Си) или ASCIIZ-строка — способ представления строк в языках программирования, при котором вместо введения специального строкового типа используется массив символов, а концом строки считается первый встретившийся специальный нуль-символ (NUL из кода ASCII, со значением 0).

Описание

Например, в строковом буфере (области памяти, выделенной для хранения строки) размером 11 байт нуль-терминированная строка «СТРОКА» в кодировке Windows-1251 может представляться следующим образом:

С Т Р О К А NUL F % NUL 4
0xD1 0xD2 0xD0 0xCE 0xCA 0xC0 0x00 0x46 0x25 0x00 0x34

В данном примере представлена область памяти из 11 байт, хотя на самом деле строка занимает всего 7. Символы после нуль-символа (8 - 11 байты) называются мусором — это данные, которые могли остаться в буфере от предыдущих строк или от других использований памяти. Среди них также могут находиться нулевые символы.

При использовании однобайтных кодировок (ASCII) объём памяти, требуемый для представления строки из N символов, равен N + 1 байт. В том случае, когда для кодирования символов применяется Юникод, длина строки зависит от используемого представления Юникода (например, 2N + 2 байта для UCS-2).

Такие строки являются стандартом в Си и некоторых других языках программирования. Поскольку они используются для передачи строковых аргументов в стандартные функции во многих операционных системах, операции для работы с нуль-терминированными строками появились в Паскале и других языках.

Для ссылки на нуль-терминированную строку применяется указатель на первый её символ. Это простой, быстрый и гибкий подход, но чреватый ошибками[1][2]. Программист постоянно должен следить за своим кодом, а именно:

  • быть уверенным, что не случаются переполнения буфера;
  • аккуратно проводить управление памятью, выделяемой под строки;
  • следить за корректной нуль-терминацией строк при использовании функций, которые её не гарантируют (например, strncpy);
  • в редких случаях, когда размер строки может быть очень велик, следить, что не происходит переполнение целого при подсчёте длины и прочих связанных с длиной вычислениях.

Кроме того, некоторые операции со строками, например, конкатенация, для нуль-терминированных строк выполняются медленнее, чем для других типов строк.

Сравнение с альтернативами

Альтернативой нуль-терминированным строкам являются способы, принятые в Паскале и современных ООП-языках. В Паскале строка начинается с первого элемента массива, а в нулевом элементе хранится длина строки. В этом случае не требуется специального терминатора для обозначения конца строки. С другой стороны, здесь на длину строки накладывается ограничение, связанное с вместимостью нулевого элемента массива, то есть в случае с однобайтовыми элементами длина строки не может превышать 255 символов. Нуль-терминированные строки такому ограничению не подвержены и теоретически могут хранить строки любой длины. В объектно-ориентированных языках применяется хранение записи с длиной строки и ссылкой (или указателем) на массив символов. Эти способы не подвержены недостатку нуль-терминированных строк: они могут хранить в себе нуль-символы без искажений и специального кодирования.

В ряде интерфейсов применяются дважды-нуль-терминированные строки, признаком завершения которых является два последовательных нуль-терминатора[3].

В языке Си

Для работы с нуль-терминированными строками в языке программирования Си используется ряд функций:

  • strcpy, wcscpy — копирование строк;
  • strlen, wcslen — вычисление длины строки;
  • strchr — поиск символа в строке;
  • strdup — дублирование строк;
  • strstr — поиск подстроки;
  • strtok — разделение строки через разделители на подстроки;
  • strbrk — поиск первого вхождения в строку одного из символов другой строки.

В языке ассемблера

В некоторых разновидностях языка ассемблера для определения NUL-терминированных строк используется специальная директива. Так в GNU Assembler-е для этого есть директива .asciz[4][5].

См. также

Примечания

  1. Joel on Software - Назад, к основам. Дата обращения: 17 сентября 2016. Архивировано из оригинала 25 сентября 2016 года.
  2. The Most Expensive One-byte Mistake - ACM Queue. Дата обращения: 17 сентября 2016. Архивировано 19 сентября 2016 года.
  3. What is the format of a double-null-terminated string with no strings? Архивная копия от 13 февраля 2019 на Wayback Machine / MSDN, 2009
  4. Использование GNU ассемблера as.: Ассемблерные директивы. Дата обращения: 17 сентября 2016. Архивировано 17 сентября 2016 года.
  5. Архивированная копия. Дата обращения: 17 сентября 2016. Архивировано 17 сентября 2016 года.

Литература

Ссылки

Эта страница в последний раз была отредактирована 11 марта 2022 в 15:16.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).