Lua string.format%c与string.char

mcg*_*mcg 3 string.format lua openwrt

Lua string.format( "%c", value )应该相当string.char( value )吗?

当字符值为零时似乎不是.

string.format( "%c", 0 ):len()
Run Code Online (Sandbox Code Playgroud)

返回0

string.char( 0 ):len()
Run Code Online (Sandbox Code Playgroud)

返回1

更奇怪的是,

string.format( "%c%s", 0, "abc" ):len()
Run Code Online (Sandbox Code Playgroud)

返回3 ; 其中%c的任何其他非零模数256值返回4,因此string.format不会像C一样在空字节处截断整个字符串sprintf,只是将%c字段折叠为空字符串而不是单字节字符串.注意,sprintf在这种情况下,C 写入零字节后跟abc字节.

在这种情况下,我在Lua文档中找不到任何描述预期行为的内容.Lua中的大多数其他字符串处理似乎将零字节视为有效的字符串字符.

这是关于OpenWrt的Lua 5.1.4-8.

特质还是错误?

fin*_*nnw 6

我认为这是一个错误.

在Lua 5.1和LuaJIT 2.0中,一次string.format格式化一个项目(使用sprintf主机C运行时提供的.)然后调用strlen以更新输出字符串的长度.由于strlen在空字符处停止,因此将覆盖此字符.

这是记录在案的行为%s,但可能是无意的%c

这在Lua 5.2中得到修复.我不希望再有5.1的更新.