lua入门教程:第七章 C API c语言操作表格

本文详细介绍了在C语言环境下如何通过lua_getglobal和lua_setfield操作Lua中的表,重点讲解了堆栈管理和如何为不存在的表添加新元素。通过实际代码演示,帮助开发者理解栈结构在lua交互中的关键作用。

lua中表的使用是最常见的,在c中如何对lua中的表进行操作也是很经常使用的功能,在如下的代码中加载了lua 代码以后,通过lua_getglobal 获得了相应的表,可以使用lua_getfield进行相应的设置了,这里必须清楚的一点是,你需要对堆栈中的数据较为清楚,清楚了堆栈顺序,你才能够知道你设置的数据到底是对谁有用的。

下面的例子,找到相应的表,原先的表并没有y的元素,后面通过lua_setfield对数据进行设置。使得lua中表中有了y的元素。

代码如下:

#include "stdafx.h"

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
};

#include <string.h>  
using namespace std;

int main()
{
	
	int error;
	lua_State* L = luaL_newstate();
	luaL_openlibs(L);

	int ret = luaL_dofile(L, "table_test.lua");
	if (ret != 0)
	{
		printf("%s", lua_tostring(L, -1));
	}

	lua_getglobal(L, "print_table");
	lua_pcall(L, 0, 0, 0);
	
	
	lua_getglobal(L, "tbtable");
	lua_getfield(L, -1, "x");
	const char *pstr = lua_tostring(L, -1);

	lua_getglobal(L, "tbtable");
	lua_pushstring(L, "abc");
	lua_setfield(L, -2, "y");
	
	lua_getglobal(L, "print_table");
	lua_pcall(L, 0, 0, 0);

	lua_close(L);

    return 0;
}

lua代码如下:

tbtable = {x="12"}

function print_table()
    print(tbtable.x)
	print(tbtable.y)
end

function return_table()
    return {x="abc"}
end

在c语言中,如果不太清楚栈的数据,压栈和出栈情况的话,可以先画出每个步骤的栈情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值