我試圖將一些C代碼橋接到Fortran中。但是,我無法將C API返回的可變長度C字符串轉換爲Fortran API所需的固定長度字符串。將可變長度字符串分配給固定長度字符串
這是一個縮減版本的代碼,不會編譯 - 我得到The shapes of the array expressions do not conform
。
character*200 function getValueFromC()
use cbridge
implicit none
type(c_ptr) :: resultString
integer(kind=c_int) :: resultLength
character, pointer, dimension(:) :: string
call c_bridge_getValue(bridge, resultString, resultLength)
call c_f_pointer(resultString, string, (/ resultLength /))
getValueFromC = string
call c_bridge_releaseString(resultString)
end function getValueFromC
cbridge
只是含有c_bridge_getValue()
和c_bridge_releaseString
定義模塊和bridge
指針(只是一個void*
)
c_bridge_getValue()
只是malloc
s上行一個新的字符串並返回它,c_bridge_releaseString()
free
S上的存儲器。
所以我的問題是,我需要做些什麼來將string
變量分配給getValueFromC
?
總是使用標籤fortran的Fortran問題。而你的代碼是Fortran2003,所以fortran90標籤是不合適的。 –