Функция возвращается успешно, и я могу использовать значения из таблицы, но появляется ошибка «Отладка не подтверждена», и это конец. Я знаю, что проблема с 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 это работает, но забывает о последнем элементе. Почему нет, если я == 1?
Неудачное утверждение появляется, когда lua_rawseti (Л, -2, я); а также я == 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;
выход:
В
С
D
!!! Отладочное утверждение не удалось !!!
int i = 0;
выход:
В
С
D
нет ошибок …
Вы уверены, что в вашем коде нет ошибок?
Я только что проверил это решение, и оно, кажется, работает, код печатает только что созданную таблицу:
#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);
}
Других решений пока нет …