我有一个具有以下签名的功能
<option>
我有一个可能为空值的字符数组
void serialize(const string& data)
(因此某些字符的值为const char* serializedString
)
我需要用给定的字符串调用给定的函数!
我要做的是如下:
'\0'
问题如下。字符串分配忽略在第一个string messageContents = string(serializedString);
serialize(messageContents.c_str());
字符后出现的所有字符。
即使我在数组上调用'\0'
,我也会在第一个size()
之前获得元素数。
P.S。我知道真实的&#39; char数组的大小(包含包含'\0'
个字符的字符的arrray的整个大小)
那么如何正确调用该方法呢?
答案 0 :(得分:8)
构造具有长度的字符串,使其不包含第一个'\0'
之前的字符,即
string messageContents = string(serializedString, length);
或简单地说:
string messageContents(serializedString, length);
然后停止调用c_str()
,serialize()
接受一个字符串,所以传递一个字符串:
serialize(messageContents);
否则,您将从const char*
构建一个新字符串,并且只会再次读取第一个'\0'
。