lua与c++交互篇:char* 中的陷阱,万恶的'/0'结尾

在C++与Lua交互时遇到一个错误,由于使用char*数组填充字符串未添加''结束符,导致Lua接收的字符串长度不符。解决方案是确保数组长度加1,并在填充后添加''作为结束符。

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值