lua与c++交互篇:char* 中的陷阱,万恶的'/0'结尾
来源:互联网 发布:成套报价软件 编辑:程序博客网 时间:2024/04/30 00:48
char* 中的陷阱,万恶的'/0'结尾
今天工作中犯了个很‘2’的错误我用char*申请了一个定长数组然后将其填充满
c++与lua交互的时候lua总报字符串长度不符
#define MAX_GUILD_NAME_LENGH 12
char mGuidName[MAX_GUILD_NAME_LENGH];
sprintf_s(mGuildName ,MAX_GUILD_NAME_LENGH ,"好大的帮会啊");
state.PushString(mGuidName);
当时没考虑太多东西,因为谁都了解String是比较安全的,
结果lua截获的字符串是“好大的帮会啊<ERROR>"
如果当时脑袋没乱的话,一下子就能想到这个error是个常识性错误
char数据是可以填充满的,然而如果char*给填充满的话,就没有'\0'结尾了,然而当执行到
state->PushString(mGuidName);的时候是将char*作为字符串传出,而传出的一个没有结束符号的字符串
如此lua当然不直到接收到什么程度才算完。
解决的办法是讲申请接受服务端数据的地方增加一个字节
char mGuidName[MAX_GUILD_NAME_LENGH + 1];
填充完数据之后无论如何都给尾部增加一句
sprintf_s(mGuildName ,MAX_GUILD_NAME_LENGH ,"好大的帮会啊");
mGuidName[MAX_GUILD_NAME_LENGH] = '\0';
如此做省去了if的判断,如果长度不足以填满,则char*中必然有个'\0'结尾,在压入字符串的时候state遇到'\0'之后就默认为字符串已经结束了,同时也就不用考虑尾部那个结束符号做什么用了。
此时我再调用
state->PushString(mGuidName);
时候lua就能够正确打印出名称了
- lua与c++交互篇:char* 中的陷阱,万恶的'/0'结尾
- Lua与C的交互(0)
- lua 与c的交互
- Lua与C的交互
- Lua与C的交互
- lua与c的交互
- C与Lua的交互
- Lua的与C交互
- Lua与C/C++的交互3:C/C++中读取Lua文件中的表
- 【Lua】Lua与C交互
- Lua 与C交互
- Lua 与 C 交互
- Lua 与C交互
- Lua 与C交互
- Lua 与C交互
- Lua 与 C 交互
- lua与c交互
- C与lua交互
- (7)线程的周期和线程的同步
- 13.3 线程的生命周期 13.4 线程的同步
- VS2008编译ACE
- HDOJ-4006/(大连网赛1006)- The kth great number 剖析
- google map 多 Marker 多个InfoWindow event
- lua与c++交互篇:char* 中的陷阱,万恶的'/0'结尾
- Power Strings
- 接口设计评估——unix编程艺术学习笔记
- 人在社会混,一定要有些心计
- 面试----java基础
- 多线程 睡眠
- Unix接口设计模式——unix编程艺术学习笔记
- 解决齐博b2b 供应价格为0问题
- 解决listview与scrollview结合使用时出现的问题