関数は正常に戻り、テーブルの値を使用できますが、「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); の場合、失敗したアサーションが表示されます。そして私== 1
私の問題を解決する解決策がないため、これら 2 つのケースで何が行われ、どのような出力が得られるかを説明しようと思います。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;
出力:
A B C D !!!デバッグ アサーションが失敗しました!!!
-------------------------------------------------- ----
int i = 0;
出力:
B C D エラーなし...