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’后默认会截断有关系,处理它的思路就是开足够的空间。

 

转载于:https://www.cnblogs.com/kikizhong/p/7727034.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值