节点 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]
的字符串数据,我们都不知道。
我确定它真的很基本,但我一直找不到类似的东西(也许我的做法完全错误)。我正在尝试将 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]
的字符串数据,我们都不知道。