簡體   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