C++ ArduinoJSON序列化在序列化为char时返回空字符串*

C++ ArduinoJSON序列化在序列化为char时返回空字符串*,c++,json,arduino,msgpack,arduinojson,C++,Json,Arduino,Msgpack,Arduinojson,我创建了一个函数,用于序列化设置并返回包含序列化数据的char* 首先,我将所有值打包到一个StaticJsonDocument,然后使用measureJson确定输出字符串的大小,然后为输出分配空间char out[strize],然后将数据序列化到分配的空间serializeJson(doc,out,strize) 问题是输出字符串由于未知原因而保持为空 我检查过的东西: Json文档构造正确,实际上包含配置设置 measureJson()函数正确返回正在分配的输出大小和空间,strize

我创建了一个函数,用于序列化设置并返回包含序列化数据的char*

首先,我将所有值打包到一个
StaticJsonDocument
,然后使用
measureJson
确定输出字符串的大小,然后为输出分配空间
char out[strize]
,然后将数据序列化到分配的空间
serializeJson(doc,out,strize)

问题是输出字符串由于未知原因而保持为空

我检查过的东西:

  • Json文档构造正确,实际上包含配置设置
  • measureJson()
    函数正确返回正在分配的输出大小和空间,
    strize
    不是0
代码:

char*configSerialize(bool-msgpack){
静态文件;
JsonArray ipk=doc.createNestedArray(“ip”);
JsonArray gateipk=doc.createNestedArray(“gateip”);
JsonArray dnsk=doc.createNestedArray(“dns”);
JsonArray mack=doc.createNestedArray(“mac”);
无符号字符i;
对于(i=0;i
这是
configSerialize()
函数中的局部变量/数组,从该函数返回后无效

一种方法是使用
new
delete
在堆上分配/取消分配空间,但我不建议在Arduino上这样做

另一种方法是在函数之外使用
char out[FIXED_SIZE];
,即作为全局变量

此外,如果您计划使用
out
作为字符串指针,则需要在末尾添加一个零字节(并为该额外字节分配空间)

char out[strsize];