我使用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
Run Code Online (Sandbox Code Playgroud)
我如何得到正确的std::string?
你无法std::string直接传递给printf.它是一种C风格的可变参数函数,只适用于C兼容类型,而不适用于(非平凡的)C++类.特别是,说明%s符要求其匹配参数是指向类型的C样式字符串(零终止字符数组)的指针const char *.
您可以使用C++流:
std::cout << "FooString: " << fooStr << '\n';
Run Code Online (Sandbox Code Playgroud)
或从字符串中提取C风格的指针:
printf("FooString: %s\n", fooStr.c_str());
Run Code Online (Sandbox Code Playgroud)
您还应该启用编译器警告; 那应该告诉你到底出了什么问题.