我使用rapidjson读取JSON文件,其中一些值是字符串。现在,rapidjson的GetString()
方法返回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
?
答案 0 :(得分:5)
您无法将std::string
直接传递给printf
。它是一种C风格的可变参数函数,只适用于C兼容类型,而不适用于(非平凡的)C ++类。特别是,%s
说明符要求其匹配参数是指向类型为const char *
的C样式字符串(零终止字符数组)的指针。
您可以使用C ++流:
std::cout << "FooString: " << fooStr << '\n';
或从字符串中提取C风格的指针:
printf("FooString: %s\n", fooStr.c_str());
您还应该启用编译器警告;应该告诉你到底出了什么问题。
答案 1 :(得分:2)
要将字符串转换为const char *,请使用string :: c_str()