gpt4 book ai didi

c - 如何使用 iso_c_binding 声明指针指针?

转载 作者:行者123 更新时间:2023-12-03 07:03:41 25 4
gpt4 key购买 nike

我正在写 iso_c_binding 在 Fortran 中调用具有以下原型(prototype)的 C 函数

int zmat_run(
const size_t inputsize,
unsigned char *inputstr,
size_t *outputsize,
unsigned char **outputbuf,
const int zipid,
int *ret,
const int iscompress
);

我的问题是如何声明 unsigned char **outputbuf ,一个在c函数内部用于分配输出缓冲区的指针,在这个接口(interface)中?

另外,我应该在 Fortran 中使用什么数据类型作为传递给这个 outputbuf 的真实参数范围?它应该是可分配的吗? (如果它是在 c 函数内部分配的)?

我目前起草了这个模块,但还没有测试过(我怀疑它会起作用)。
module zmatlib
use iso_c_binding, only: c_char, c_size_t, c_ptr, C_NULL_CHAR
interface
integer(c_int) function zmat_run(inputsize, inputbuf, outputsize, outputbuf, zipid, ret, level) bind(C, name="zmat_run")
use iso_c_binding
integer(c_size_t), value :: inputsize
integer(c_int), value :: zipid, level
integer(c_size_t), intent(out) :: outputsize
integer(c_int), intent(out) :: ret
character(kind=c_char), intent(in) :: inputbuf(*)
character pointer(c_ptr),intent(out) :: outputbuf
end function zmat_run
end interface
end module

最佳答案

尝试类型(C_PTR),意图(out)。然后,您将需要使用 Fortran 函数 c_f_pointer 将 C 指针与 Fortran 指针相关联。可能是 C_CHAR 类型。

关于c - 如何使用 iso_c_binding 声明指针指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63885606/

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