使用const char *初始化std :: string导致乱码

时间:2014-08-29 11:32:20

标签: c++ string

我使用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

2 个答案:

答案 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()