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.
特质还是错误?
我认为这是一个错误.
在Lua 5.1和LuaJIT 2.0中,一次string.format格式化一个项目(使用sprintf主机C运行时提供的.)然后调用strlen以更新输出字符串的长度.由于strlen在空字符处停止,因此将覆盖此字符.
这是记录在案的行为%s,但可能是无意的%c
这在Lua 5.2中得到修复.我不希望再有5.1的更新.