gpt4 book ai didi

c - Fortran-C 桥接中的字符串数组使用 iso_c_binding

转载 作者:太空狗 更新时间:2023-10-29 16:41:23 26 4
gpt4 key购买 nike

我正在编写代码,使用 Fortran 的 C 互操作性机制(在 Fortran 2003 中引入并在较新版本的 gfortran 和 ifort 中实现)从 Fortran 调用 C 函数。

This answer几乎是我所需要的,但我不太清楚我应该在 Fortran 中为如下所示的 C 函数使用什么接口(interface)声明:

int use_array(int n, char * array[]){
int i;
for(i=0; i<n; i++){
printf("Item %d = %s\n",i,array[i]);
}
return n;
}

我不清楚 Fortran 端的接口(interface)声明应该是什么:

interface
function use_array(n, x) bind(C)
use iso_c_binding
integer (c_int) use_array
integer (c_int), value :: n
character(c_char) WHAT_SHOULD_GO_HERE? :: x
end function use_array
end interface

我知道我也必须处理空终止问题。

最佳答案

我们的做法是使用C_PTR 数组指向字符串。例如:

CHARACTER(LEN=100), DIMENSION(numStrings), TARGET :: stringArray
TYPE(C_PTR), DIMENSION(numStrings) :: stringPtrs

然后我们在 stringArray 中设置我们的字符串,记住以 null 终止它们,例如:

DO ns = 1, numStrings
stringArray(ns) = "My String"//C_NULL_CHAR
stringPtrs(ns) = C_LOC(stringArray(ns))
END DO

并将 stringPtrs 传递给 C 函数。

C函数有接口(interface):

void stringFunc(int *numStrings, char **stringArray) {
int i;
for(i=0;i<*numStrings;++i) {
printf("%s\n",stringArray[i]);
}
}

关于c - Fortran-C 桥接中的字符串数组使用 iso_c_binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686532/

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