Linux下C与lua交互

本文介绍如何使用C++调用Lua脚本并读取其中的table数据。通过实例展示了打开Lua状态、加载Lua标准库、执行Lua脚本、获取Lua全局变量中的table数据并读取特定字段的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转https://blog.youkuaiyun.com/u013224233/article/details/87804404?utm_source=app

c调用lua的table

data.lua

print("hello")
width = 10
length = 20

Data =
{
name = "zhang_yi" ,
age = 24 ,
lover = "lijuanxian" ,
}

cpp

#include <iostream>
#include <string.h>

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


using namespace std;
int main(){
	//打开lua
	lua_State*L=luaL_newstate();
	if (!L)
	{
		cout<<"lua state error\n";
		return -1;
	}
	//打开lua标准库
	luaL_openlibs(L);

	//执行lua脚本
	if(luaL_loadfile(L, "data.lua") || lua_pcall(L, 0,0,0)){
		printf("error %s\n", lua_tostring(L,-1));
		return -1;
	}

	//把全局变量 Data表 里的值压入堆栈
	lua_getglobal(L,"Data"); //-1

	//把指针 s 指向的以零结尾的字符串压栈
	lua_pushstring(L, "name"); //name -1  "Data" -2
	//此时栈顶为 name
	if (lua_isstring(L,-1))
	{
		const char*p=lua_tostring(L,-1);
		cout<<p<<endl;
	}

	//把 t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值,而 k 则是栈顶放的值
	//lua_gettable第二个参数是table在栈中的索引,取栈顶作为key,在table中获取相对的value,压入栈(替换掉原来的栈顶key)
	lua_gettable(L,-2);
	//此时栈顶为name对应的key 
	if (lua_isstring(L,-1))
	{
		const char*p=lua_tostring(L,-1);
		cout<<p<<endl;
	}
	printf("lua_gettop=%d\n",lua_gettop(L));

	lua_pushstring(L, "age");
	printf("lua_gettop=%d\n",lua_gettop(L));
	/*printf("lua_gettop=%d\n",lua_gettop(L));
	lua_gettable(L,-3);

	if (lua_isnumber(L,-1))
	{
		int nump=lua_tonumber(L,-1);
		cout<<nump<<endl;
	}*/

	lua_pushstring(L, "lover");
	printf("lua_gettop=%d\n",lua_gettop(L));
	lua_gettable(L,-4);
	if (lua_isstring(L,-1))
	{
		const char*p=lua_tostring(L,-1);
		cout<<p<<endl;
	}
	
    lua_close(L);
	return 0;
}

编译

sudo g++ -I/usr/local/include/ -L/usr/local/lib/ -lm C_use_lua.cpp -o test /usr/local/lib/liblua.a -ldl

gdut17@ubuntu:~/code/python/Project1/Project1$ sudo g++ -I/usr/local/include/ -L/usr/local/lib/ -lm C_use_lua.cpp -o test /usr/local/lib/liblua.a -ldl
gdut17@ubuntu:~/code/python/Project1/Project1$ ./test
hello
name
zhang_yi
lua_gettop=2
lua_gettop=3
lua_gettop=4
lijuanxian

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值