【发布时间】:2021-08-23 03:04:21
【问题描述】:
我编译了一个C 程序(array.out 编译自 array.c in linux),它返回一个指向双精度数组的指针。
array.c:
#include <stdio.h>
#include <stdlib.h>
double* main(int argc, char *argv[]){
double *arr;
arr = (double *)calloc((3), (unsigned)(sizeof(double)));
arr[0] = 10;
arr[1] = 20;
arr[3] = 30;
return arr;
}
我还有一个正在运行的 express nodejs 服务器:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
})
有没有办法调用 c 程序(array.out)并在 express nodeJs 服务器中处理其响应(arr)?
【问题讨论】:
-
是的,通过 http 服务器 .. 尽管下面提到了一般错误
-
C 中的
main不能返回双精度数组。它必须返回一个int,该int作为结果代码传回shell。 -
你可以发C++ addon
-
您可以编写 C 程序以将 double 数组输出到 stdout,然后 node.js 执行该程序并获取输出。见How to execute an external program from within node.js。
-
sizeof(...)已经返回了一个无符号类型(size_t),完全不需要转换为unsigned int。在最坏的情况下,您甚至可能会截断大小信息(想象一下 16 位 unsigned int 和超过 65k 字节的 huge 结构)。承认,这只是理论上的性质,但实际上演员阵容仍然不正确。
标签: javascript node.js arrays c express