Введение
Контрольный символ, все биты которого равны 0. Нулевой символ (также нулевой терминатор) — это контрольный символ со значением ноль. Он присутствует во многих наборах символов, включая те, которые определены кодами Baudot и ITA2, ISO/IEC 646 (или ASCII), контрольным кодом C0, универсальным кодированным набором символов (или Unicode) и EBCDIC. Он доступен почти во всех основных языках программирования. Его часто сокращают как NUL (или NULL, хотя в некоторых контекстах этот термин используется для нулевого указателя). В 8-битовых кодах он известен как нулевой байт. Изначально этот символ выполнял функцию NOP — при передаче на принтер или терминал он не оказывал никакого эффекта (однако некоторые терминалы некорректно отображали его как пробел). Когда электромеханические телепринтеры использовались в качестве устройств вывода компьютера, один или несколько нулевых символов отправлялись в конце каждой напечатанной строки, чтобы дать механизму время вернуться в начальную позицию для печати следующей строки. На перфоленте символ представляется полным отсутствием отверстий, поэтому новая неперфорированная лента изначально заполнена нулевыми символами, и часто текст можно было вставить в зарезервированное пространство, заполненное нулевыми символами, пробивая новые символы поверх существующих нулей. Сегодня этот символ имеет гораздо большее значение в языке программирования C и его производных, а также во многих форматах данных, где он служит зарезервированным символом, используемым для обозначения конца строки, часто называемой строкой с нулевым завершением. Это позволяет строке быть любой длины, с накладными расходами всего в один байт; альтернативный способ хранения счетчика требует либо ограничения длины строки до 255, либо накладных расходов более одного байта (другие преимущества и недостатки описаны в статье о строках с нулевым завершением).
The null character (also null terminator) is a control character with the value zero. It is present in many character sets, including those defined by the Baudot and ITA2 codes, ISO/IEC 646 (or ASCII), the C0 control code, the Universal Coded Character Set (or Unicode), and EBCDIC. It is available in nearly all mainstream programming languages. It is often abbreviated as NUL (or NULL, though in some contexts that term is used for the null pointer). In 8 bit codes, it is known as a null byte. The original meaning of this character was like NOP—when sent to a printer or a terminal, it has no effect (some terminals, however, incorrectly display it as space). When electromechanical teleprinters were used as computer output devices, one or more null characters were sent at the end of each printed line to allow time for the mechanism to return to the first printing position on the next line. On punched tape, the character is represented with no holes at all, so a new unpunched tape is initially filled with null characters, and often text could be inserted at a reserved space of null characters by punching the new characters into the tape over the nulls. Today the character has much more significance in the programming language C and its derivatives and in many data formats, where it serves as a reserved character used to signify the end of a string, often called a null terminated string. This allows the string to be any length with only the overhead of one byte; the alternative of storing a count requires either a string length limit of 255 or an overhead of more than one byte (there are other advantages/disadvantages described in the null terminated string article).
Представительство
В исходном коде нулевой символ часто представляется как escape-последовательность \0 в строковых литералах (например, "abc\0def") или в символьных константах ('\0'); последний также может быть записан просто как 0 (без кавычек и обратной косой черты). Во многих языках (таких как C, который ввел эту нотацию), это не отдельная escape-последовательность, а восьмеричная escape-последовательность, состоящая из одной восьмеричной цифры 0; следовательно, за \0 не должно следовать ни одна из цифр от 0 до 7, иначе это будет интерпретировано как начало более длинной восьмеричной escape-последовательности. Другие escape-последовательности, используемые в различных языках, включают \000, \x00, \z или \u0000. Нулевой символ можно поместить в URL с использованием процентного кода %00. Возможность представления нулевого символа не всегда гарантирует, что результирующая строка будет интерпретирована правильно, поскольку многие программы рассматривают нуль как конец строки. Таким образом, возможность его ввода (в случае непроверенного пользовательского ввода) создает уязвимость, известную как внедрение нулевого байта, и может привести к уязвимостям в системе безопасности. В обозначении с использованием символа «^» нулевой символ представляется как ^@. На некоторых клавиатурах можно ввести нулевой символ, удерживая и нажимая (на американской раскладке часто достаточно просто , без необходимости получения символа @). Шестнадцатеричное представление нуля – 00. Декодирование строки Base64 AA== также дает нулевой символ. В документации нулевой символ иногда изображается как символ шириной em, содержащий буквы "NUL". В Unicode для этого существует символ: .
Кодирование
Во всех современных наборах символов нулевой символ имеет кодовую точку со значением ноль. В большинстве кодировок это преобразуется в одну единицу кода со значением ноль. Например, в UTF-8 это один нулевой байт. Однако в Modified UTF-8 нулевой символ кодируется двумя байтами: это позволяет использовать байт со значением ноль, который теперь не используется для представления какого-либо символа, в качестве терминатора строки.