Lua C API: вставка элементов таблицы вызывает сбой отладочного утверждения

Функция возвращается успешно, и я могу использовать значения из таблицы, но появляется ошибка «Отладка не подтверждена», и это конец. Я знаю, что проблема с 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
нет ошибок …

1

Решение

Вы уверены, что в вашем коде нет ошибок?

Я только что проверил это решение, и оно, кажется, работает, код печатает только что созданную таблицу:

#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);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]