Lua string.format( "%c", value )
是否等同于string.char( value )
?
似乎不是当字符值为零时。
string.format( "%c", 0 ):len()
返回0
string.char( 0 ):len()
回报1
更奇怪的是
string.format( "%c%s", 0, "abc" ):len()
返回3;其中%c的任何其他非零模256值都返回4,因此string.format
不会像C sprintf
那样在空字节处截断整个字符串,而只是将%c
字段折叠为空字符串而不是一个字节字符串。请注意,在本例中,C sprintf
写入零字节,后面跟着abc字节。
我在Lua文档中找不到任何描述这种情况下预期行为的东西。Lua中的大多数其他字符串处理似乎将零字节视为有效的字符串字符。
这是在OpenWrt上的Lua5.1.4-8上。
怪癖还是虫子?
发布于 2013-05-15 07:17:02
我觉得这是个窃听器。
在Lua5.1和LuaJIT 2.0中,string.format
一次格式化一个项(使用主机C运行时提供的sprintf
)。然后调用strlen
来更新输出字符串的长度。由于strlen
在空字符处停止,此字符将被覆盖。
这是为%s
记录的行为,但对于%c
来说可能是无意的。
这一点在Lua 5.2中得到了修正。我不希望有更多的更新到5.1。
发布于 2013-05-15 21:54:04
在书“编程在lua”第二版。在2.4章中,有这样的上下文:“Lua中的strings具有通常的含义:一个字符序列。Lua是8位干净的,它的字符串可能包含任何数字代码,包括嵌入式零。这意味着您可以将任何二进制数据存储到一个字符串中。”
所以这不是一个错误
https://stackoverflow.com/questions/16567979
复制相似问题