2012-12-12 47 views
0

我有以下的代码,将数据添加到一个rapidjson ::文档,从而宣告。Rapidjson位翻转

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到地图中,像这样:

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 

某些值似乎是变了。但我不知道如何或为什么。

回答

2

我首先看到的是这个错误(也许不相关的问题):

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

这是错误的,原因如下:

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

.c_str():获取该字符串

的内部数据,但字符串实例是破坏下一行,打印结果之前,所以colnumstr指针指向内存中无效的东西。希望大多数时候数据仍然有效......但在某些情况下,数据可能会被别的东西覆盖。

的妥善解决是做

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

colnumstrObj会破坏在函数结束,马上不...

+0

谢谢!这是问题! –