c_str()返回空字符串

时间:2016-08-17 21:22:49

标签: c++ google-nativeclient

由于某种原因,c_str()返回空字符串,参数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");

此函数将解析上面发送的字典,并在out_function中的argsout_params中返回函数的名称

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

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

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

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

http://pastebin.com/S4P8aZqL

1 个答案:

答案 0 :(得分:9)

只有产生该结果的c_str()对象有效,std::string的结果才有效。

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

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

另一个(更好的)想法是不要急于转换为C-string。将结果返回为std::string并在最后一刻调用c_str():当你真的需要一个C字符串时。