节点v8变量默认为NULL,但根据传递的参数重新分配

时间:2015-05-26 21:33:53

标签: c v8

我确信这是非常基本的,但是我找不到类似的东西(也许我的方法完全是错误的)...我正在尝试将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代码,但这并没有真正帮助解释这个问题,希望这有点澄清一点。

1 个答案:

答案 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]字符串数据。