我遇到无法解释的类型转换问题。
这是我想做的
我有一个动态分配的缓冲区,我需要将其转换为字符串,以便使用来自外部库的解析函数。
我的实施
unsigned char* msg_data;
msg_data = (unsigned char*)malloc(msg_data_length);
string msg_data_str = std::string(reinterpret_cast<const char*>(_msg_data));
SomeObject myObject;
myObject.ParseFromString(msg_data_str);
但问题是这样的:我的解析函数失败,因为它接收到错误的数据大小。假设我有一个size的缓冲区msg_data_length = 10
,我的字符串的大小为my_data_str.size() = 14
。
我通过使用摆脱了我的问题,my_data_str.resize(my_data_length)
但我想了解为什么大小my_data_str
不是直接的msg_data_length
。
谢谢你的帮助 !
我假设消息数据实际上没有像C样式的字符串那样以零结尾,这在std::string
构造函数超出范围以查找终止符时会导致未定义的行为。
要解决此问题,请使用带有两个参数(字符串和长度)的构造函数。
参见例如此std::string
构造函数参考。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句