New Titles + En, Es, Ru updates

This commit is contained in:
Sergei Asanov
2023-03-29 19:45:31 +04:00
parent 08d957f30c
commit 944a890d91
285 changed files with 2809 additions and 1697 deletions

View File

@ -1,9 +1,6 @@
Во многих языках программирования нулевой символ используется для обозначения окончания строки.
Нулевой символ, также известный как Пустой символ, был разработан для использования в компьютерных терминалах, принтерах, системах обработки текста и телекоммуникационном оборудовании, обозначая пустую или недействительную позицию в потоке данных.
Это так называемые "Си-строки" (название происходит от языка Си, где используются такие строки).
Другие названия: null-терминированная строка или ASCIZ-строка.
При таком подходе, код, работающий со строкой, изначально не знает её длины и обрабатывает символы последовательно, пока не встретит нулевой.
Это самый первый символ Юникода и ASCII, занимающий нулевую позицию. Символ Null имеет ряд применений, таких как обозначение конца строк или блоков данных, заполнение пространства между элементами данных, предотвращение обработки данных после определенной точки и многое другое. В контексте программирования и обработки текстовых данных, нулевой символ может использоваться как маркер конца строки или массива символов, особенно в языках программирования, таких как C и C++. Это так называемые C-строки (читается «Си-строки», название происходит от языка Си, где используются такие строки), другие названия: Null-терминированная строка или ASCIZ-строка. При таком подходе, код, работающий со строкой, изначально не знает её длины и обрабатывает символы последовательно, пока не встретит нулевой.
[[[code:c
/* Вывод строки */
@ -16,22 +13,28 @@ while (s[i] != 0) { // работать, пока текущий символ н
Из минусов такого подхода:
[*] Заранее неизвестна длина строки
[*] Строка не может содержать непосредственно символ \0
[*] Заранее неизвестна длина строки;
[*] Строка не может содержать непосредственно символ \0;
[*] Если забыть поставить в конце \0 или случайно удалить его, код пойдёт работать дальше с непредвиденными последствиями.
В случае использования многобайтовых кодировок фиксированной ширины, нулевой символ также должен занимать положенное количество байт.
Например, в UCS-2: два нулевых байта.
Альтернативный подход при организации строк - хранить длину строки в отдельной переменной.
При выводе Unicode-строки нулевой символ не имеет никакого представления и никого влияния на поток вывода.
Некоторые программы и устройства могут отображать его в виде пробела, но это не совсем корректно.
В случае использования многобайтовых кодировок фиксированной ширины, нулевой символ также должен занимать положенное количество байт. Например, в UCS-2 — два нулевых байта. Альтернативный подход при организации строк — хранить длину строки в отдельной переменной.
Однако, полное игнорирование данного символа иногда может приводить к неприятным последствиями.
Например, некоторые старые браузеры расценивали строку типа [code <\0script>] как [code <script>], что позволяло злоумышленникам внедрять XSS на чужие сайты (авторы которых при обработке данных не предусмотрели такой нюанс).
Для вставки данного символа во многих языках программирования имеется escape-последовательность [code \0].
Для вставки данного символа во многих языках программирования имеется Escape-последовательность [code \0].
Это один из восьми управляющих символов, чьё наличие требует стандарт POSIX.
Как и остальные управляющие символы, этот символ не имеет визуального представления и не занимает места на экране или в печати. В разделе [BLOCK:control-pictures] есть отдельный символ, представляющий графическое изображение нулевого символа в виде сокращения NUL — [U:2400].
Escape-последовательность: [code \0].
Символ является одним из восьми управляющих символов, обязательного наличия которых требует стандарт POSIX:
[*] [code \0] [U:0000] [U:0000 *#];
[*] [code \a] [U:0007] [U:0007 *#];
[*] [code \b] [U:0008] [U:0008 *#];
[*] [code \t] [U:0009] [U:0009 *#];
[*] [code \n] [U:000A] [U:000A *#];
[*] [code \v] [U:000B] [U:000B *#];
[*] [code \f] [U:000C] [U:000C *#];
[*] [code \r] [U:000D] [U:000D *#].