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

Node v8 variable default NULL but reassign based on argument passed

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

您的 post 没有提出问题或解释您在使用代码时遇到的问题。所以我假设您 运行 代码与 posted 完全一样,有时对函数的调用行为异常或崩溃。


您现有的代码失败,因为:

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*的结果,因为它returns 指向字符串内容的指针。

注意。我不熟悉 V8,所以可能有一种更优雅的方式来访问 args[3] 的字符串数据,我们都不知道。