如何使用包含空值的char *初始化std :: string

时间:2016-03-13 17:39:40

标签: c++ arrays string

我有一个具有以下签名的功能

<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的整个大小)

那么如何正确调用该方法呢?

1 个答案:

答案 0 :(得分:8)

构造具有长度的字符串,使其不包含第一个'\0'之前的字符,即

string messageContents = string(serializedString, length);

或简单地说:

string messageContents(serializedString, length);

然后停止调用c_str()serialize()接受一个字符串,所以传递一个字符串:

serialize(messageContents);

否则,您将从const char*构建一个新字符串,并且只会再次读取第一个'\0'