返回类型为[]的无界C数组



在我的库的C API中,我有一些具有签名的函数集,如

size_t get_data(unsigned char* buffer, size_t buffer_len);
// or
size_t get_float_data(float* buffer, size_t buffer_len);

此函数返回内部数组中的元素数量(因此您可以将NULL传递给缓冲区并获得实际数组长度),buffer是目标缓冲区,buffer_lenbuffer中可用元素的数量。

典型用法是:

size_t data_size = get_data(NULL, 0);
unsigned char* data = (unsigned char*)malloc(data_size);
get_data(data, data_size);
//or
size_t float_data_size = get_float_data(NULL, 0);
float* float_data = (float*)malloc(float_data_size * sizeof(float));
get_float_data(float_data, float_data_size);

我想把这个函数包装在SWIG中用于下一个签名

byte[] get_data();
float[] get_float_data();

用于Java和c#。

我发现了很多例子,如果无界的C数组是输入,但不能找到任何输出。我不明白如何用typemap改变目标函数的签名而不具体化函数名。

我发现了很多例子,如果无界的C数组是输入,但无法找到任何输出。

这是有原因的:你不能——在c(和c++)中是非法的

char f() [] { // the actual syntax
//whatever you want to do with it
}

但是由于数组(未绑定或未绑定)也是一个指针所以你可以执行

char * f() {
//whatever you want to do like before
}

如果您还想返回它的大小,最好的方法是创建一个包含大小和指针的struct

所有以数组为输入的函数实际上都是以指向数组的指针为输入的

最新更新