c_str() returns 空字符串

c_str() returns empty string

出于某种原因 c_str() returns 空字符串,参数 const chart**out_function 将包含文件操作的方法名称,如 fopen 所以基本上我所做的正在将一个字符串转换为 c_str() 但我在下面得到一个空字符串是我如何调用

在这部分我只准备了一个带有操作名称的字典,你可以注意到我只是将 "fopen" 作为字符串发送

    pp::VarDictionary fileOp;
    pp::VarArray args;
    args.Set(0, "filename.txt");
    args.Set(1, "wb");
    fileOp.Set("args", args);
    fileOp.Set("cmd", "fopen");

这个函数会解析上面发送的字典和returnout_function中的函数名和out_params中的args

    int ParseMessage(pp::Var message, const char** out_function,
        pp::Var* out_params) {

我使用这行代码将字符串转换为 c_string,但它 return 是空文本

*out_function =  cmd_value.AsString().c_str();

这是完整的代码,它基于 Google Native Client 但同时它是标准的 C/C++ 代码

http://pastebin.com/S4P8aZqL

c_str() 的结果仅在产生该结果的 std::string 对象有效时才有效。

在您的情况下,AsString() 调用会生成一个 临时 std::string 对象,然后立即将其销毁。在那之后 c_str() 调用的结果就不再有意义了。尝试访问该指针指向的内存会导致未定义的行为。

不要尝试存储 c_str() 返回的指针。如果您长时间需要该字符串作为 C 字符串,请自行为其分配内存缓冲区并将 c_str() 的结果复制到该缓冲区。

另一个(更好的)想法是不要急于转换为 C 字符串。 Return 结果为 std::string 并在最后一刻对其调用 c_str():当您真的非常需要 C 字符串时。