Jump to content

Нулевой символ

Нулевой символ (также нулевой терминатор ) — это управляющий символ со значением ноль. [1] [2] [3] [4] Он присутствует во многих наборах символов , включая те, которые определены кодами Бодо и ITA2 , ISO/IEC 646 (или ASCII ), управляющим кодом C0 , универсальным набором кодированных символов (или Unicode ) и EBCDIC . Он доступен практически на всех основных языках программирования . [5] Его часто называют NUL (или NULL , хотя в некоторых контекстах этот термин используется для обозначения нулевого указателя ). В 8-битных кодах он известен как нулевой байт .

Первоначальное значение этого символа было похоже на NOP — при отправке на принтер или терминал он не оказывает никакого эффекта (однако некоторые терминалы неправильно отображают его как пробел ). Когда электромеханические телетайпы использовались в качестве компьютерных устройств вывода, в конце каждой печатной строки отправлялись один или несколько нулевых символов, чтобы дать механизму время вернуться в первую позицию печати в следующей строке. [ нужна ссылка ] На перфоленте символ представлен вообще без отверстий, поэтому новая неперфолента изначально заполнена нулевыми символами, и часто текст можно вставить в зарезервированное пространство с нулевыми символами, пробивая новые символы на ленту поверх нулевых символов. .

Сегодня этот символ имеет гораздо большее значение в языке программирования C и его производных, а также во многих форматах данных, где он служит зарезервированным символом, обозначающим конец строки . [6] часто называется строкой с нулевым завершением . [7] Это позволяет строке иметь любую длину с накладными расходами всего в один байт; альтернатива сохранению счетчика требует либо ограничения длины строки в 255, либо накладных расходов более одного байта (есть и другие преимущества/недостатки, описанные в статье о строках с нулевым завершением ).

Представительство [ править ]

В исходном коде нулевой символ часто представляется как escape-последовательность. \0 в строковых литералах (например, "abc\0def") или в символьных константах ( '\0'); последнее также можно записать просто как 0 (без кавычек и косой черты). [8] Во многих языках ( например, C , где введена эта запись) это не отдельная escape-последовательность, а восьмеричная escape-последовательность с одной восьмеричной цифрой 0; как следствие, \0 после него не должно идти ни одной цифры 0 через 7; в противном случае это интерпретируется как начало более длинной восьмеричной escape-последовательности. [9] Другие escape-последовательности, которые используются в разных языках: \000, \x00, \z, или \u0000. Нулевой символ можно поместить в URL-адрес с кодом процента. %00.

Возможность представления нулевого символа не всегда означает, что результирующая строка будет правильно интерпретирована, поскольку многие программы считают нулевой символ концом строки. Таким образом, возможность ввести его (в случае непроверенного пользовательского ввода ) создает уязвимость, известную как внедрение нулевого байта , и может привести к уязвимостям безопасности. [10]

В обозначениях каретки нулевой символ ^@. На некоторых клавиатурах можно ввести нулевой символ, удерживая нажатой кнопку Ctrl и нажатие @ (на макетах США просто Ctrl+ 2 часто будет работать, поскольку нет необходимости ⇧ Shift чтобы получить знак @).

Шестнадцатеричное : обозначение нуля 00. Декодирование Base64 строки AA== также дает нулевой символ.

В документации нулевой символ иногда представляется как символ одинарной ширины , содержащий буквы «NUL». В Юникоде для этого есть символ: U+2400 СИМВОЛ НУЛЯ .

Кодировка [ править ]

Во всех современных наборах символов нулевой символ имеет нулевое значение кодовой точки. В большинстве кодировок это преобразуется в одну кодовую единицу с нулевым значением. Например, в UTF-8 это один нулевой байт. Однако в модифицированном UTF-8 нулевой символ кодируется как два байта: 0xC0,0x80 . Это позволяет использовать байт со значением ноль, который теперь не используется ни для одного символа, в качестве терминатора строки.

Ссылки [ править ]

  1. ^ Формат ASCII для сетевого обмена . IETF . сек. 5.2. дои : 10.17487/RFC0020 . РФК 20 . NUL (Null): символ «все нули», который может служить для заполнения времени и носителя.
  2. ^ «Набор управляющих символов ISO 646» (PDF) . Секретариат ISO/TC 97/SC 2. 1 декабря 1975 г. п. 4.4. Архивировано из оригинала (PDF) 12 мая 2014 г. Позиция: 0/0, Имя: Null, Сокращение: Nul
  3. ^ «Символ Юникода 'NULL' (U+0000)» . Проверено 20 октября 2018 г.
  4. ^ «Элементы управления C0 и базовая латиница» (PDF) . Консорциум Юникод. 2018 . Проверено 20 октября 2018 г.
  5. ^ «Байт со всеми битами, установленными в 0, называемый нулевым символом , должен существовать в базовом наборе символов выполнения; он используется для завершения литерала строки символов». — ANSI/ISO 9899:1990 (стандарт ANSI C), раздел 5.2.1.
  6. ^ « Строка — это непрерывная последовательность символов, заканчивающаяся первым нулевым символом и включая его» — ANSI/ISO 9899:1990 (стандарт ANSI C), раздел 7.1.1
  7. ^ Рабочий проект стандарта языка программирования C++ (PDF) (рабочий проект стандарта ISO 14882), ISO / IEC , 28 февраля 2011 г., стр. 427, N3242=11-0012 , получено 27 февраля 2013 г. , Байтовая строка с нулевым завершением , или NTBS, представляет собой последовательность символов, элемент с наивысшим адресом которой с определенным содержимым имеет нулевое значение ( завершающий нулевой символ ); ни один другой элемент в последовательности не имеет нулевого значения.
  8. ^ Керниган и Ричи, С. , стр. 38: "Символовая константа '\0' представляет символ с нулевым значением, нулевой символ. '\0' часто пишется вместо 0, чтобы подчеркнуть символьную природу некоторого выражения, но числовое значение равно 0."} }
  9. ^ В YAML эта комбинация представляет собой отдельную escape-последовательность .
  10. ^ Раздел «Введение нулевого байта» Классификация угроз WASC. Раздел «Атака нулевого байта».

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b0f2b7c2fe09e5aca4a5bc3f1852aa03__1718305620
URL1:https://arc.ask3.ru/arc/aa/b0/03/b0f2b7c2fe09e5aca4a5bc3f1852aa03.html
Заголовок, (Title) документа по адресу, URL1:
Null character - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)