gpt4 book ai didi

c++ - *v8::String::Utf8Value(args[0]->ToString()) 不返回 node.js 插件参数的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:16 26 4
gpt4 key购买 nike

我发现 *v8::String::Utf8Value(args[0]->ToString()) 在 Node 0.8.2 32 位上返回正确的字符串,但在 Node 0.8 上不返回正确的字符串。 8 个 64 位。

有人知道为什么吗?

我的 node.js 插件看起来像这样:

#define BUILDING_NODE_EXTENSION
#include <node.h>

#define MAX_OUTPUT_BUF 80
extern "C" char *do_sqlsig(char *in);

using namespace v8;

Handle<Value> Sqlsig(const Arguments& args) {
HandleScope scope;
char *c_arg, *ret;

if (args.Length() < 1) {
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
}

c_arg = *v8::String::Utf8Value(args[0]->ToString());

ret = c_arg; //do_sqlsig(c_arg);

return scope.Close(String::New(ret));
}

void Init(Handle<Object> exports) {
exports->Set(String::NewSymbol("sqlsig"),
FunctionTemplate::New(Sqlsig)->GetFunction());
}

NODE_MODULE(sqlsig, Init)

如您所见,我正在为 C 函数 do_sqlsig 编写一个包装器。我对C很了解,对C++知之甚少

最佳答案

指针从 *v8::String::Utf8Value(args[0]->ToString()); 返回的字符串指向在这一行的末尾被销毁(当Utf8Value 被销毁)。您可以在一行中创建和销毁一个 Utf8Value 对象。取消引用悬垂指针时,这是未定义的行为,也是您在不同版本上看到不同结果的原因。

将它分成两行,只要您的 Utf8Value 对象在范围内,该字符串就有效。

v8::String::Utf8Value str(args[0]->ToString());
c_arg = *str;

关于c++ - *v8::String::Utf8Value(args[0]->ToString()) 不返回 node.js 插件参数的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916210/

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