微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字符串数组从 C 返回到 Fortran

如何解决将字符串数组从 C 返回到 Fortran

我正在尝试使用“iso_c_binding”将一个字符串数组从 C 返回到 Fortran。该程序编译,但给出一个运行时错误。 我的 C 程序:

#include <stdio.h>    
void ret_array(int * numStrings,char **arr2 ) {                                
    int dim1=5;    
    char *arr1[5]={"name1","name2","name3","name4","name5"};    
    arr2 = &arr1;    
    printf("%s\n",arr2[0]);    
    printf("%s\n",arr2[1]);    
    printf("%s\n",arr2[2]);    
    printf("%s\n",arr2[3]);    
    printf("%s\n",arr2[4]);    
    numStrings = &dim1;    
    printf("%s","Ending  interface :");    
    fflush(stdout);    
 }  

调用的 Fortran 程序

program main
  implicit none
  CHaraCTER(LEN = 255),dimension(:),allocatable:: str2
  integer(kind = 4):: istr
  call get_arr(istr,str2)
  PRINT *,str2(1)
contains
  subroutine get_arr(n,str1)
    use iso_c_binding
    implicit none
    INTEGER(KIND = 4):: n
    CHaraCTER(LEN = 255),ALLOCATABLE:: str1
    character(kind = c_char),pointer:: fptr(:)
    TYPE(C_PTR),DIMENSION(:),allocatable:: cptr
    integer:: len1,ii

    interface 
      subroutine ret_array(dim_len,str_arr1) bind(c)
        use iso_c_binding
        integer(c_int),INTENT(OUT):: dim_len
        TYPE(C_PTR),DIMENSION(:,:),intent(out):: str_arr1
      end subroutine
    end interface

    call ret_array(n,cptr)
    PRINT *,"Number :",n
    allocate(str1(n))
    do ii = 1,n
      call c_f_pointer(cptr(ii),fptr,[ 255 ])
      len1 = index(fptr(ii),C_NULL_CHAR)
      PRINT *,len1
      str1(ii) = TRANSFER(fptr(1:len1-1),str1(ii))
    end do
  end subroutine
end program                    

当我运行它时,出现以下错误

name1
name2
name3
name4
name5
Ending  interface :
Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.

Backtrace for this error:
#0  0x7f9e86776d01 in ???
#1  0x7f9e86775ed5 in ???
#2  0x7f9e865aa20f in ???
#3  0x7f9e869aa077 in ???
#4  0x55e9a5195350 in get_arr
    at /home/test/fort_code/ret_arr.f90:27
#5  0x55e9a5195984 in MAIN__
    at /home/test/fort_code/ret_arr.f90:6
#6  0x55e9a5195a37 in main
    at /home/test/fort_code/ret_arr.f90:7
make: *** [Makefile:3: run] Floating point exception (core dumped)

我是在 iso_c_binding 中使用指针的新手。你能指出为什么指针没有被返回给 Fortran 程序吗? 预先感谢您的帮助

解决方法

您正在更改 arr2 以指向本地数组 arr1,然后返回本地数组的地址。

那行不通。 arr1 在函数返回后无效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。