[英]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.