什么是嵌入式零?

时间:2011-12-12 14:15:39

标签: lua

我正在阅读Lua reference manual,它会谈到“嵌入的零”,用“\ 0”表示。

当我尝试在Lua控制台中看到它时,它没有任何有意义的打印:

> print "a \0 b"
a 

那么,这是什么“嵌入式零”?

5 个答案:

答案 0 :(得分:13)

每个字符都有一个内部数字表示,例如\'表示'a'。代码为\ 0的字符不代表任何可见字符,但在C语言和其他编程语言中用作终结符。

本手册希望明确说明'\ 0'中的 <终止符号。它还意味着您可以将任意字节加载到字符串(图像,音频,视频,本机代码等)中,并且您不会冒被某些库函数在第一个'\ 0'处截断的风险(这可能发生在C中)如果你使用字符串相关的函数)。

答案 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   源代码字符串文字或字符常量。

Wikipedia Null Character