2014-08-29 46 views
-4

我使用rapidjson讀取JSON文件,其中一些值是字符串。現在,rapidjson的GetString()方法返回const char *。不過,我想將它存儲在std::string中。我試過這個:用const char *初始化std :: string導致亂碼

const char* foo = d["foo"].GetString(); 
printf("Foo: %s\n", foo); // Prints correctly 

std::string fooStr(foo); 
printf("FooString: %s\n", fooStr); // Gibberish 

我該如何得到正確的std::string

+6

'%s'必須採用'char *',而不是'std :: string'。在那裏使用'fooStr.c_str()'。另外,'d'是什麼? – 2014-08-29 11:33:48

+0

@MattMcNabb d是rapidjson文檔。 – manabreak 2014-08-29 11:34:45

+1

從你的問題中不清楚'foo'是否指向有效的存儲空間,或者破壞了存儲空間 – 2014-08-29 11:35:59

回答

4

你不可錯過std::string直接printf。這是一個C風格的可變參數函數,它只適用於C兼容的類型,而不是(非平凡的)C++類。特別是,%s說明符要求其匹配參數是指向類型爲const char *的C風格字符串(零終止字符數組)的指針。

你可以使用一個C++流:

std::cout << "FooString: " << fooStr << '\n'; 

或從字符串中提取一個C語言風格的指針:

printf("FooString: %s\n", fooStr.c_str()); 

還應該使編譯器警告;那應該告訴你到底什麼是錯的。

+0

啊,就是這樣。我只是檢查了調試器,字符串的確具有正確的值。咄。謝謝,我會盡快接受你的回答。 :) – manabreak 2014-08-29 11:36:17

+0

我更喜歡C++流,因爲它們具體是C++構造,但這是一個品味問題。不確定是否有任何理由相互傾向 – 2014-08-29 11:36:20

2

要字符串轉換爲const char *使用字符串:: c_str()

相關問題