Moh*_*usa -1 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");
Run Code Online (Sandbox Code Playgroud)
此功能会分析上面发出的字典和返回函数的名称out_function,并args在out_params
int ParseMessage(pp::Var message, const char** out_function,
pp::Var* out_params) {
Run Code Online (Sandbox Code Playgroud)
我使用这行代码将字符串转换为c_string,但它返回空文本
*out_function = cmd_value.AsString().c_str();
Run Code Online (Sandbox Code Playgroud)
这是完整的代码,它基于Google Native Client,但同时它是标准的C/C++代码
AnT*_*AnT 10
的结果c_str()是唯一的,只要有效std::string的是产生的结果是有效的对象.
在您的情况下,AsString()调用会生成一个临时 std::string对象,然后立即销毁.在那之后,那个c_str()电话的结果不再有意义.尝试访问该指针指向的内存会导致未定义的行为.
不要尝试存储返回的指针c_str().如果您需要将该字符串作为C字符串延长一段时间,请自行为其分配内存缓冲区并将结果复制c_str()到该缓冲区.
另一个(更好)的想法是不要急于转换为C字符串.返回结果std::string并c_str()在最后一刻调用它:当你真正需要一个C字符串时.