由于某种原因,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
中的args
和out_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 ++代码
答案 0 :(得分:9)
只有产生该结果的c_str()
对象有效,std::string
的结果才有效。
在您的情况下,AsString()
调用会生成一个临时 std::string
对象,然后立即将其销毁。之后,c_str()
电话的结果不再有意义。尝试访问该指针指向的内存会导致未定义的行为。
不要尝试存储c_str()
返回的指针。如果您需要将该字符串作为C字符串延长一段时间,请自行为其分配内存缓冲区,并将c_str()
的结果复制到该缓冲区。
另一个(更好的)想法是不要急于转换为C-string。将结果返回为std::string
并在最后一刻调用c_str()
:当你真的需要一个C字符串时。