将可变长度字符串分配给固定长度字符串

迈克尔·安德森

我正在尝试将一些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了一个新字符串并返回它,然后c_bridge_releaseString() free存储了内存。

所以我的问题是,我需要怎么做才能将string变量分配getValueFromC

迈克尔·安德森

一种解决方案是循环并分配给字符串切片。我尚未验证这是100%正确,但可以为我编译...

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 /) )
  do i = 1, min(200, resultLength)
    getValueFromC(i:i) = string(i)
  end do
  call c_bridge_releaseString(resultString)
end function getValueFromC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架中的固定长度字符串?

来自分类Dev

Fortran函数可变长度字符串返回

来自分类Dev

使用sscanf读取固定长度的字符串

来自分类Dev

固定长度C#的字符串对象

来自分类Dev

将字符串的长度分配给整数:C ++

来自分类Dev

C-如何将内存分配给可变长度的字符串输入?

来自分类Dev

如何使用RegEx查找可变长度的字符串

来自分类Dev

c中的可变长度格式字符串

来自分类Dev

生成固定长度的随机字符串(使用C)

来自分类Dev

固定长度的数字到字符串

来自分类Dev

使用Regex验证可变长度的字符串

来自分类Dev

获取固定长度的子字符串匹配模式

来自分类Dev

字符串中字符串的固定长度

来自分类Dev

c将可变长度int连接到字符串而不打印它

来自分类Dev

创建固定长度的数字字符串

来自分类Dev

分割包含固定长度列的字符串

来自分类Dev

以固定长度的数字分割字符串

来自分类Dev

vim:可变长度的替换字符串

来自分类Dev

固定长度的盐字符串加密

来自分类Dev

固定长度C#的字符串对象

来自分类Dev

stata语法中的可变长度字符串参数

来自分类Dev

使用Java压缩字符串以固定长度

来自分类Dev

可变长度的scala字符串插值

来自分类Dev

固定长度后如何分割字符串数组

来自分类Dev

用某些单词替换可变长度字符串

来自分类Dev

从可变长度的字符串中删除单词

来自分类Dev

c中的固定长度字符串数组

来自分类Dev

Amazon Redshift 中的固定长度字符串比较

来自分类Dev

拆分非分隔的可变长度字符串