Lua - lua_tostring()返回奇怪的结果

时间:2016-03-30 14:58:25

标签: c lua floating-point

请使用以下代码:

lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );

返回包含奇怪数值的字符串的非NULL指针,如"17137503626592379""14326121113845883"等...

似乎随机,不违反内存(至少在几次尝试中),并且返回的字符串总是包含有效的数值,尽管不是我首先传递的那个(即123)。

我认为这与浮点/整数转换有关。

我正在使用Lua 5.3.2,它支持“integer”和“float”作为“number”的两个子类型,我使用float作为数字,int使用int作为整数。 我正在使用Windows CE和Windows 7.在两个平台上,“int”和“float”都是32位,尽管我的Windows 7是64位,因为我明确地编译了x86。

这是我的一块luaconf.h

#if !defined(LUA_INT_TYPE)
#define LUA_INT_TYPE    LUA_INT_INT
#endif

#if !defined(LUA_FLOAT_TYPE)
#define LUA_FLOAT_TYPE  LUA_FLOAT_FLOAT
#endif

在写这篇文章时,我意识到这可能是因为我改变了所使用的类型,而没有重新编译我正在链接的静态lua .lib。这可能是由于这个原因吗?我会尝试重新编译...

这可能是由于其他原因吗?谢谢。

2 个答案:

答案 0 :(得分:2)

一旦定义了用于整数和浮点数的类型,重新编译lua53.lib后,它就能正常工作。

问题是我在不重新编译库的情况下更改了这些类型。 Windows桌面版本最初使用双精度而不是浮点数进行编译。我想这就是问题的根源。

答案 1 :(得分:0)

我回答,因为我无法发表评论,但我在你的代码中看到的内容。

lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );

你正在推动整数和拉一个字符串,因为它们是不同的数据类型,我认为它给你有趣的输出是正常的。我想这是试图将堆栈的信息从整数转换为字符串。