Fortran Coder

查看: 151|回复: 2

[讨论] 递延长度字符串数组如何表示?

[复制链接]

89

帖子

24

主题

1

精华

大师

F 币
839 元
贡献
498 点
发表于 2022-7-1 10:38:07 来自移动端 | 显示全部楼层 |阅读模式
本帖最后由 weixing1531 于 2022-7-1 23:52 编辑

目前递延长度字符串功能已经十分接近VBA中可变字符string类型了,但递延长度字符串数组如何表示呢?
我目前想到的办法就是派生类型封装一下

[Fortran] 纯文本查看 复制代码
type::string
  character(len=:),allocatable::str
end type


[Fortran] 纯文本查看 复制代码
type(string)::a(4)
a(1)%str="hi"


很想直接
[Fortran] 纯文本查看 复制代码
character(len=:),allocatable::str(4)

但编译器会报错
请问有没有更好的办法?




637

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
350 元
贡献
168 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

发表于 2022-7-2 09:24:38 | 显示全部楼层
intel fortran 的论坛上有人提过这问题。steven大神说只能用派生类型。
https://community.intel.com/t5/I ... riables/td-p/787190
我感觉还好,起码这个派生类型是个通用的。

660

帖子

2

主题

0

精华

大宗师

F 币
3255 元
贡献
2030 点
发表于 2022-7-11 10:15:19 | 显示全部楼层
1、不可能直接用,那样的话相当于c的二级指针,内存不连续,fortran做不到。
2、kind和size都是可分配,这样是可以的,但需要二者同时分配,也就是不能实现递延,只能固定长度。
[Fortran] 纯文本查看 复制代码
program Test
implicit none
character(:),allocatable:: str(:)
allocate(str,source=['abc','12345'])

print*,len(str(1)), str(1)
print*,len(str(2)), str(2)

end program


您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2022-8-11 07:31

Powered by Tencent X3.4

© 2013-2022 Tencent

快速回复 返回顶部 返回列表