我有一个具有以下签名的函数
void serialize(const string& data)
我有一个可能为空值的字符数组
const char* serializedString
Run Code Online (Sandbox Code Playgroud)
(所以有些人物有价值'\0')
我需要用给定的字符串调用给定的函数!
我要做的是如下:
string messageContents = string(serializedString);
serialize(messageContents.c_str());
Run Code Online (Sandbox Code Playgroud)
问题如下.字符串分配忽略第一个'\0'字符后出现的所有字符.
即使我调用size()数组,我也会在第一个之前获得元素数量'\0'.
PS我知道char数组的'真实'大小(arrray的整个大小包含包含字符的'\0'字符)
那么我该如何正确调用该方法呢?
构造具有长度的字符串,使其不仅包含第一个字符,'\0'即
string messageContents = string(serializedString, length);
Run Code Online (Sandbox Code Playgroud)
或者干脆:
string messageContents(serializedString, length);
Run Code Online (Sandbox Code Playgroud)
并停止调用c_str(),serialize()接受一个字符串,所以传递一个字符串:
serialize(messageContents);
Run Code Online (Sandbox Code Playgroud)
否则你将从中构造一个新的字符串const char*,并且只会'\0'再次读取第一个字符串.