将ruby数组值传递到C数组中

将ruby数组值传递到C数组中,第1张

概述我试图在基于 this recipe的C中为ruby制作一个独立的FFT扩展 我已经注意到几种在ruby和c之间传递不同值的方法.然而,对于ruby和C来说,它都是相当新的,并且无法解决如何将数组从VALUE ruby​​对象复制到C数组中的问题. 编译错误: SimpleFFT.c:47:错误:下标值既不是数组也不是指针 和代码: #include "ruby.h"#include "fft. 我试图在基于 this recipe的C中为ruby制作一个独立的FFT扩展

我已经注意到几种在ruby和c之间传递不同值的方法.然而,对于ruby和C来说,它都是相当新的,并且无法解决如何将数组从VALUE ruby​​对象复制到C数组中的问题.

编译错误:
SimpleFFT.c:47:错误:下标值既不是数组也不是指针

和代码:

#include "ruby.h"#include "fft.c" // the c file I wish to wrap in rubyVALUE SimpleFFT = Qnil;voID Init_simplefft();VALUE method_rfft(VALUE self,VALUE anObject);voID Init_simplefft() {    SimpleFFT = rb_define_module("SimpleFFT");    rb_define_method(SimpleFFT,"rfft",method_rfft,1);}VALUE method_rfft(VALUE self,VALUE inputArr) {    int N = RARRAY_LEN(inputArr); // this works :)    // the FFT function takes an array of real and imaginary paired values    double (*x)[2] = malloc(2 * N * sizeof(double));     // and requires as an argument another such array (empty) for the transformed output    double (*X)[2] = malloc(2 * N * sizeof(double));    for(i=0; i<N; i++) {        x[i][0]=NUM2DBL(inputArr[i]); // ***THIS liNE CAUSES THE ERROR***        x[i][1]=0;  // setting all the imaginary values to zero for simplicity    }    fft(N,x,X); // the target function call    // this bit should work in principle,dunno if it's optimal    VALUE outputArr = rb_ary_new();    for(i=0; i<N; i++){        rb_ary_push(outputArr,DBL2NUM(X[i][0]));    }    free(x);    free(X);    return outputArr;}

提前致谢 :)

解决方法 你不能下标inputArr,因为它是一个VALUE而不是一个C数组.即,它是一种标量类型.要访问特定索引,请使用

rb_ary_entry(inputArr,i)

顺便说一句,你可能想首先验证它是一个数组:

Check_Type(rarray,T_ARRAY);
总结

以上是内存溢出为你收集整理的将ruby数组值传递到C数组中全部内容,希望文章能够帮你解决将ruby数组值传递到C数组中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1288621.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存