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