【问题标题】:Lua - lua_tostring() returning strange resultsLua - lua_tostring() 返回奇怪的结果
【发布时间】:2016-07-18 16:18:39
【问题描述】:

让下面的代码:

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

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

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

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

我使用Lua 5.3.2,它支持“整数”和“浮点”作为“数字”的两个子类型,我使用浮点数表示数字,整数表示整数。 我同时使用 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。这可能是因为这个吗?我会尝试重新编译...

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

【问题讨论】:

    标签: c lua floating-point


    【解决方案1】:

    我回答是因为我无法发表评论,但我在您的代码中看到了什么。

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

    您正在推入整数和拉取字符串,因为它们是不同的数据类型,我认为这很正常,它会给您带来有趣的输出。我想这是试图将堆栈信息从整数转换为字符串。

    【讨论】:

    • 感谢您的帮助,但 lua_tostring 应该进行 int -> 字符串转换。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多