繁体   English   中英

如何将字符串数组从fortran传递给c?

[英]How to pass a array of string from fortran to c?

我想将我填写了fortran代码的字符串数组传递给C。但是,每次尝试检查结果时,我发现每个字符串都在C中打印为整个数组。任何人都可以帮忙? 这是代码的fortran部分:

        SUBROUTINE hello (Characters)
CHARACTER*(16)  Characters(5)
Characters=(/"ABCD","BCDF","CVFG","D HG","J67F"/)
return
END

这是C代码:

    void hello_(char *[16]);
    int main(int argc,char **args)
    {
    char        Character2[5][16];
    int         j;
    hello_(&Character2);
    for(j=0;j<5;j++){
    printf("String [ %d ] = %s \n",j,Character2[j]);
    }
    return 0;
    }

我得到的结果是这样的:

 String [ 0 ] = ABCD            BCDF            CVFG            D HG                  J67F            `����U 
 String [ 1 ] = BCDF            CVFG            D HG            J67F            `����U 
 String [ 2 ] = CVFG            D HG            J67F            `����U 
 String [ 3 ] = D HG            J67F            `����U 
 String [ 4 ] = J67F            `����U  

我想知道为什么我无法访问从fortran传递到C的那些字符串中的每一个? 我的意思是,我如何才能确保像Character2 [1]一样正是我在fortran中创建的“ ABCD”! 谢谢

由于FORTRAN字符串不是NUL终止的,因此C代码将无法检测到正在打印的字符串的结尾。

由于您的字符串长度不得超过一定长度,因此您可以在print语句中指定该字符串(尽管我不清楚,如果您不提供足够长的字符串,那么FORTRAN是否会用空格填充):

printf("String [ %d ] = %.4s \n",j,Character2[j]);

如果您的FORTRAN代码知道它将由C调用,则应在将数组返回给调用方之前将NUL字节添加到字符串中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM