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