mirror of
				https://github.com/symbl-cc/symbl-data.git
				synced 2025-11-03 22:13:19 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Во многих языках программирования нулевой символ используется для обозначения окончания строки.
 | 
						||
 | 
						||
Это так называемые "Си-строки" (название происходит от языка Си, где используются такие строки).
 | 
						||
Другие названия: null-терминированная строка или ASCIZ-строка.
 | 
						||
 | 
						||
При таком подходе, код, работающий со строкой, изначально не знает её длины и обрабатывает символы последовательно, пока не встретит нулевой.
 | 
						||
 | 
						||
[[[code:c
 | 
						||
/* Вывод строки */
 | 
						||
i = 0; // начать с начала строки
 | 
						||
while (s[i] != 0) { // работать, пока текущий символ не \0
 | 
						||
    echo s[i]; // вывести очередной символ
 | 
						||
    i++; // перейти к следующему
 | 
						||
}
 | 
						||
]]]
 | 
						||
 | 
						||
Из минусов такого подхода:
 | 
						||
 | 
						||
[*] Заранее неизвестна длина строки
 | 
						||
[*] Строка не может содержать непосредственно символ \0
 | 
						||
[*] Если забыть поставить в конце \0 или случайно удалить его, код пойдёт работать дальше с непредвиденными последствиями.
 | 
						||
 | 
						||
В случае использования многобайтовых кодировок фиксированной ширины, нулевой символ также должен занимать положенное количество байт.
 | 
						||
Например, в UCS-2: два нулевых байта.
 | 
						||
 | 
						||
Альтернативный подход при организации строк - хранить длину строки в отдельной переменной.
 | 
						||
 | 
						||
При выводе Unicode-строки нулевой символ не имеет никакого представления и никого влияния на поток вывода.
 | 
						||
Некоторые программы и устройства могут отображать его в виде пробела, но это не совсем корректно.
 | 
						||
 | 
						||
Однако, полное игнорирование данного символа иногда может приводить к неприятным последствиями.
 | 
						||
Например, некоторые старые браузеры расценивали строку типа [code <\0script>] как [code <script>], что позволяло злоумышленникам внедрять XSS на чужие сайты (авторы которых при обработке данных не предусмотрели такой нюанс).
 | 
						||
 | 
						||
Для вставки данного символа во многих языках программирования имеется escape-последовательность [code \0].
 | 
						||
 | 
						||
Это один из восьми управляющих символов, чьё наличие требует стандарт POSIX.
 | 
						||
 |