string中含有‘\0’的字符转成char* 后被截断的问题
在做protobuf的一个项目中,碰到将对象序列化后成为string a="/010/002/020/000/023/"
将 const char* b=a.c_str()后,传递。
string c =b;
c ="/010/002/020",后面的0以后的字符无法直接处理。
解决方法:protobuf 通过 amqp_bytes_t传递
开辟amqp_bytes_t的大小
char kiki[30];//可以动态分配,目的是把string每个字符放到指定的内存空间内,用于memcpy拷贝。
for(int i=0;i<a.length();i++)
kiki[i]=a[i];
把char 分配到amqp_bytes_t里面。
amqp_bytes_t messagebody;
messagebody = amqp_bytes_malloc(a.length());
messagebody.len =a.length();
memcpy(messagebody.bytes,&kiki[0],a.lenth());
传递
收到字符后:string默认也会截断含‘\0’字符,所以给string设定长度后,再拷贝;
string msg;
msg.resize(envelope.message.body.len);
for(int i=0;i<envelope.message.body.len;i++)
{
msg[i]=*(char*)messagebody.bytes;
messagebody.bytes++;
}
这个问题的产生主要和c++中的char 转string的时候,遇到‘\0’后默认会截断有关系,处理它的思路就是开足够的空间。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步