Что такое встроенный ноль? - PullRequest
7 голосов
/ 12 декабря 2011

Я читаю справочное руководство Lua , и в нем говорится о «встроенных нулях», обозначаемых символом «\ 0».

Когда я пытаюсь увидеть его в консоли Lua, он ничего не печатает:

> print "a \0 b"
a 

Итак, что это за "встроенный ноль"?

Ответы [ 5 ]

13 голосов
/ 12 декабря 2011

Каждый символ имеет внутреннее числовое представление, например \ 97 для «a».Символ с кодом \ 0 не представляет какой-либо видимый символ, но используется в качестве терминатора в Си и других языках программирования.

Руководство хочет прояснить, что '\ 0' это не терминатор в Lua.Это также означает, что вы можете загружать произвольные байты в строку (изображение, аудио, видео, собственный код и т. Д.), И вы не рискуете, чтобы он был усечен до первого '\ 0' какой-либо библиотечной функцией (что может произойти в Cесли вы используете функции, связанные со строками).

3 голосов
/ 12 декабря 2011

\0 - это просто байт со значением ноль, ему не нужно никакого причудливого имени.Строки Lua - это просто байтовые строки, которые отслеживают их длину, поэтому они могут содержать любые байтовые значения, включая ноль.Некоторые функции обрабатывают эти байтовые строки так, как если бы они были C-строками, оканчивающимися на \0, по-видимому, print делает это.

Это означает, что в lua #s (длина строки) равно O (1)против O (n) для C строк.Кроме того, приложение может использовать строки lua для любых потоков байтов, например, текста в кодировке UTF-16 или содержимого двоичных файлов.

1 голос
/ 08 июня 2018

Lua 5.2 работает хорошо, когда Lua 5.1 имеет несколько проблем с нулевыми байтами в строке.Я обнаружил, что функция print отбрасывает все символы после нулевого байта.Также функция string.format возвращает строку до первого нулевого символа.

1 голос
/ 12 декабря 2011

Это будет похоже на помещение символа NULL в строку C.Хотя ваш вывод на печать не показывает символ b, другие функции Lua должны работать с полной длиной строки (в отличие от функций обработки строки C, которые работают со строкой с завершением NULL).

Одно из применений этого будетиспользовать одну строку для хранения нескольких значений, разделенных \0.

0 голосов
/ 12 декабря 2011

Нулевой символ часто представляется как escape-последовательность \ 0 в строковые литералы исходного кода или символьные константы.

Пустой символ Википедии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...