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

man*_*eak -4 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
Run Code Online (Sandbox Code Playgroud)

我如何得到正确的std::string

Mik*_*our 5

你无法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)

您还应该启用编译器警告; 那应该告诉你到底出了什么问题.