gpt4 book ai didi

c++ - Rapidjson 位翻转

转载 作者:行者123 更新时间:2023-11-28 03:26:18 27 4
gpt4 key购买 nike

我有以下代码将数据添加到 rapidjson::Document,声明如下:

rapidjson::Document rest;
rest.SetObject();

在循环中。

Value v(value.c_str());
stringstream ss;//create a stringstream
ss << "a" << colnum;
const char* colnumstr = ss.str().c_str();
cout << "json: colnumstr = \"" << colnumstr << "\", value = \"" << value << "\"" << endl;
rest.AddMember(colnumstr,v,rest.GetAllocator());

当循环结束时,我将 json 作为字符串添加到 map 中,如下所示:

StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
rest.Accept(writer);

string reststring = buffer.GetString();
cout << "Pushing " << reststring << " to map" << endl;
parseddata["rest"].push_back(reststring);

这是奇怪的一点:

json: colnumstr = "a1", value = "13745438"
json: colnumstr = "a2", value = "#N/A"
json: colnumstr = "a9", value = "Top 19"
Pushing {"a1":"9999\u0000438","99":"#N/A","31":"Top 19"} to map

某些值似乎正在发生变化。但我不知道如何或为什么。

最佳答案

我首先看到的是这个错误(可能与您的问题无关):

const char* colnumstr = ss.str().c_str();

这是错误的,为什么:

ss.str() :返回字符串实例的拷贝。

.c_str() : 获取该字符串的内部数据

但是字符串实例在打印结果之前销毁下一行,所以 colnumstr 指针指向内存中无效的内容。希望大部分时间数据仍然有效...但在某些情况下,数据可能会被其他内容覆盖。

正确的解决办法是做

string colnumstrObj = ss.str();
const char* colnumstr = colnumstrObj .c_str();

colnumstrObj 将在函数结束时销毁,而不是立即...

关于c++ - Rapidjson 位翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com