Я пытаюсь переместить некоторый код C в Fortran. Тем не менее, у меня возникают проблемы с получением строк переменной длины C, возвращаемых C API, в строки фиксированной длины, требуемые API Fortran.Присвоить строку переменной длины строке фиксированной длины
Вот приведенная версия кода, который не будет компилироваться - я получаю 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 для вопросов Фортрана. И ваш код - Fortran2003, поэтому тэг fortran90 был неуместным. –