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’后默認會截斷有關系,處理它的思路就是開足夠的空間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM