Нулевой символ (также нулевой терминатор ) — это управляющий символ со значением ноль. [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нажатой клавишу (на американских раскладках часто работает просто + , поэтому для получения знака @ нет необходимости).@Ctrl2⇧ Shift
Шестнадцатеричное обозначение нуля : .00
Декодирование строки Base64AA==
также дает нулевой символ.
В документации нулевой символ иногда представляется как символ одинарной ширины , содержащий буквы «NUL». В Юникоде для этого есть символ: U+2400 ␀ .
Во всех современных наборах символов нулевой символ имеет нулевое значение кодовой точки. В большинстве кодировок это преобразуется в одну кодовую единицу с нулевым значением. Например, в UTF-8 это один нулевой байт. Однако в модифицированном UTF-8 нулевой символ кодируется двумя байтами: 0xC0,0x80 . Это позволяет использовать байт со значением ноль, который теперь не используется ни для одного символа, в качестве терминатора строки.
NUL (Null): символ «все нули», который может служить для заполнения времени и носителя.
Позиция: 0/0, Имя: Null, Сокращение: Nul
Байтовая
строка с нулевым завершением
, или NTBS, представляет собой последовательность символов, элемент с самым высоким адресом с определенным содержимым имеет нулевое значение (завершающий
нулевой символ
); ни один другой элемент в последовательности не имеет нулевого значения.