C++ 快速翻转钻头

C++ 快速翻转钻头,c++,C++,我有以下代码将数据添加到rapidjson::文档中,声明如下: 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:

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

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());

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

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

这是错误的,为什么:

ss.str()
:返回字符串实例的副本

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

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

正确的解决办法是

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

函数结束时,
colnumstrObj
将被销毁,不会立即销毁…

谢谢!!这就是问题所在!
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();
string colnumstrObj = ss.str();
const char* colnumstr = colnumstrObj .c_str();