1

使用 Lua C-API 有没有一种连接两个LuaL_Buffers 的有效方法?我宁愿不做任何不必要的 memcopys 并希望结果被luaL_pushresult(). 缓冲区包含嵌入的零,因此我无法将它们转换为 char 数组并使用luaL_addstring(). 修改任一缓冲区都是可以接受的。

luaL_Buffer buf1;
luaL_Buffer buf2;
luaL_buffinit(L, &buf1);
luaL_buffinit(L, &buf2);  
luaL_addchar(&buf1, "a");
luaL_addchar(&buf2, "b");
luaL_addchar(&buf1, "\0");
luaL_addchar(&buf2, "\0");
luaL_pushresult(L, Want_this(&buf1, &buf2) ); // "a\0b\0" is now the Lua string 
                                              //  at the top of the stack
4

2 回答 2

2

而是在 C 级别创建整个字符串并使用luaL_addlstring,这样可以安全地将空字符添加到缓冲区中。

于 2012-07-08T02:27:13.943 回答
2

您可以buf2先压入堆栈,将其添加到buf1(弹出),然后压入buf1堆栈。

luaL_pushresult(L, &buf2); // push "b\0" onto the stack
luaL_addvalue(&buf1); // pop that string and add it to buf1
luaL_pushresult(L, &buf1); // push "a\0b\0" onto the stack
于 2012-07-08T02:28:43.307 回答