我确信这是非常基本的,但是我找不到类似的东西(也许我的方法完全是错误的)...我正在尝试将str传递给'call_to_c_lib_func'函数它采用NULL或字符串(char *)。
#include <stdio.h>
#include <string.h>
#include <v8.h>
void test(const v8::FunctionCallbackInfo<Value>& args) {
char *str = NULL;
if (!args[3]->IsNull() && !args[3]->IsUndefined()) {
String::Utf8Value arg_str(args[3]->ToString());
str = *arg_str;
}
// Following function takes either NULL or char*
call_to_c_lib_func(str);
}
编辑:Post最初包含了简化的C代码,但这并没有真正帮助解释这个问题,希望这有点澄清一点。
答案 0 :(得分:1)
您的帖子没有提出问题或解释您对代码有什么问题。所以我假设你完全按照发布的方式运行代码,有时对函数的调用表现得很奇怪或崩溃。
您现有的代码失败,原因是:
String::Utf8Value arg_str(args[3]->ToString());
位于{
代码块}
内,但您尝试在代码块退出后访问其内容(因此在arg_str
被销毁后)。
相反,你可以写:
String::Utf8Value temp;
char *str = NULL;
if (!args[3]->IsNull() && !args[3]->IsUndefined())
{
temp = args[3]->ToString();
str = *temp;
}
call_to_c_lib_func( str );
当然,有许多方法可以为猫提供皮肤,只需在使用v8::String
时注意不要在字符串被销毁后使用operator*
的结果,因为它会返回指针字符串的内容。
NB。我不熟悉V8,因此可能有一种更优雅的方式来访问我们都不知道的args[3]
字符串数据。