我正在阅读Lua reference manual,它会谈到“嵌入的零”,用“\ 0”表示。
当我尝试在Lua控制台中看到它时,它没有任何有意义的打印:
> print "a \0 b"
a
那么,这是什么“嵌入式零”?
答案 0 :(得分:13)
每个字符都有一个内部数字表示,例如\'表示'a'。代码为\ 0的字符不代表任何可见字符,但在C语言和其他编程语言中用作终结符。
本手册希望明确说明'\ 0'
答案 1 :(得分:3)
\0
只是一个值为零的字节,它不需要任何花哨的名称。 Lua字符串只是跟踪其长度的字节字符串,因此它们可能包含任何字节值,包括零。有些函数将这些字节字符串视为以\0
结尾的C字符串,显然print
执行此操作。
这意味着在lua中,#s
(字符串长度)对于C字符串是O(1)与O(n)。应用程序可以将lua字符串用于任何字节流,例如UTF-16编码文本或二进制文件内容。
答案 2 :(得分:1)
这类似于在C字符串中放置一个NULL字符。虽然您的打印输出不显示b
字符,但其他Lua函数应该使用字符串的全长(与使用NULL终止字符串的C字符串处理函数不同)。
这样做的一个用途是使用一个字符串来保存由\0
分隔的多个值。
答案 3 :(得分:1)
当Lua 5.1在字符串中有多个nul字节的问题时,Lua 5.2运行良好。 我发现函数print在nul字节后删除所有字符。 函数string.format也会将字符串返回到第一个空字符。
答案 4 :(得分:0)
空字符通常表示为转义序列\ 0 in 源代码字符串文字或字符常量。