gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:25:09 25 4
gpt4 key购买 nike

我确信它确实很基本,但我一直找不到类似的东西(也许我完全以错误的方式处理它)..我试图将 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);
}

编辑:帖子最初包含简化的 C 代码,这并不能真正帮助解释问题,希望这能澄清一点。

最佳答案

您的帖子没有提出问题或解释您在代码中遇到的问题。因此,我假设您完全按照发布的方式运行代码,有时对函数的调用行为奇怪或崩溃。

<小时/>

您现有的代码失败的原因是:

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*的结果已被销毁,因为它返回一个指向字符串内容的指针。

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

关于c - Node v8 变量默认为 NULL,但根据传递的参数重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com