如果我们需要连接大量的字符串或者字符,一个一个的连接方式效率是很低的。我们可以使用辅助库提供的buffer相关函数来解决这个问题。
Auxlib中的buffer的使用:
static int str_upper(lua_State* L)
{
size_t l;
size_t i;
luaL_Buffer b;
const char* s = luaL_checklstring(L, 1, &l);
luaL_buffinit(L, &b);
for (i=0; i<l; i++)
{
luaL_putchar(&b, toupper((unsigned char)(s[i])));
}
luaL_pushresult(&b);
return 1;
}
首先使用luaLBuffer声明一个变量,然后使用luaL_buffinit初始化这个变量,此时buffer保留了一份状态L的拷贝,因此当我们调用其他操作buffer的函数的时候不需要传递L。然后宏luaL_putchar将一个单个字符放入buffer,或者可以使用luaL_addlstring(luaL_Buffer* B, const char* s, size_t l)、luaL_addstring(luaL_Buffer* B, const char* s)来指定字符串放入buffer。最后使用luaL_pushresult刷新buffer并将最终的字符串放到栈顶。
将这个C函数压入栈以后,在lua中就可以直接调用这个函数进行字符串的连接了