函数返回成功,我可以使用表中的值,但错误“Debug Assertion Failed”显示,结束。我知道assert的问题是在for循环中,但并不完全知道如何解决这个问题。提前谢谢。
static int l_xmlNodeGetValues(lua_State *L)
{
int iDocID = luaL_checkint(L, 1);
const char *pszNodeName = luaL_checkstring(L, 2);
CConfig *file = docs.at(iDocID);
int i = 1;
lua_newtable(L);
for( TiXmlElement *e = file->GetRootElement()->FirstChildElement(pszNodeName);
e; e = e->NextSiblingElement(pszNodeName) )
{
lua_pushstring(L, e->GetText());
lua_rawseti(L,-2,i);
i++;
}
return 1;
}
编辑:当我设置int i时;在0它可以工作但忘记最后一个元素。如果i == 1,为什么不呢?
当 lua_rawseti(L,-2,i); 和 i == 1
时,断言显示失败由于没有解决方案可以解决我的问题,我将尝试描述它的作用以及这两种情况下的输出结果。我只想从xml文件中的指定节点获取所有值:
<root>
<node>A</node>
<node>B</node>
<node>C</node>
<node>D</node>
</root>
脚本看起来像这样:
xmlfile = xmlOpenFile( "myfile.xml", "root" );
if ( xmlfile ) then
for _, v in ipairs( xmlNodeGetValues( xmlfile, "node" ) ) do
print( v );
end
end
问题:
int i = 1;
输出:
一个 乙 C d !!! debug assertion failed !!!
int i = 0;
输出:
乙 C d 没有错误...
答案 0 :(得分:2)
您确定代码中没有错误吗?
我刚刚检查了这个解决方案,它似乎工作,代码打印刚刚创建的表:
#include <lua.hpp>
#include <stdio.h>
static int fun(lua_State * L)
{
int i;
lua_newtable(L);
for(i = 0; i < 10; i++ )
{
lua_pushstring(L, "A");
lua_rawseti(L,-2,i);
}
lua_setglobal(L, "t");
return 1;
}
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
fun(L);
if (luaL_dostring(L, "for k,v in ipairs(t) do print(k,v); end;\n"))
printf("%s\n",luaL_checkstring(L, -1));
lua_close(L);
}