Введение

Контрольный символ, все биты которого равны 0. Нулевой символ (также нулевой терминатор) — это контрольный символ со значением ноль. Он присутствует во многих наборах символов, включая те, которые определены кодами Baudot и ITA2, ISO/IEC 646 (или ASCII), контрольным кодом C0, универсальным кодированным набором символов (или Unicode) и EBCDIC. Он доступен почти во всех основных языках программирования. Его часто сокращают как NUL (или NULL, хотя в некоторых контекстах этот термин используется для нулевого указателя). В 8-битовых кодах он известен как нулевой байт. Изначально этот символ выполнял функцию NOP — при передаче на принтер или терминал он не оказывал никакого эффекта (однако некоторые терминалы некорректно отображали его как пробел). Когда электромеханические телепринтеры использовались в качестве устройств вывода компьютера, один или несколько нулевых символов отправлялись в конце каждой напечатанной строки, чтобы дать механизму время вернуться в начальную позицию для печати следующей строки. На перфоленте символ представляется полным отсутствием отверстий, поэтому новая неперфорированная лента изначально заполнена нулевыми символами, и часто текст можно было вставить в зарезервированное пространство, заполненное нулевыми символами, пробивая новые символы поверх существующих нулей. Сегодня этот символ имеет гораздо большее значение в языке программирования C и его производных, а также во многих форматах данных, где он служит зарезервированным символом, используемым для обозначения конца строки, часто называемой строкой с нулевым завершением. Это позволяет строке быть любой длины, с накладными расходами всего в один байт; альтернативный способ хранения счетчика требует либо ограничения длины строки до 255, либо накладных расходов более одного байта (другие преимущества и недостатки описаны в статье о строках с нулевым завершением).

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

В исходном коде нулевой символ часто представляется как 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 нулевой символ кодируется двумя байтами: это позволяет использовать байт со значением ноль, который теперь не используется для представления какого-либо символа, в качестве терминатора строки.