用可变长度字符串初始化 Fortran 字符数组

initialize fortran character array with variable length strings

我有一个代码,我在其中设置了一个带有一组默认“选项”的字符数组,我可能希望也可能不希望在代码执行期间覆盖它。如果我用所有相同长度的字符串(短于或等于最大可能长度 5)初始化数组,则代码有效:

PROGRAM test
  character(len=5) :: s(3)=["a","b","c"]
  s(1)="12345678"
  print *,s
END PROGRAM test

产出

12345b    c    

但是如果字符串是可变长度的。

character(len=5) :: s(3)=["a","bb","c"]

然后我得到一个编译错误:

Error: Different CHARACTER lengths (1/2) in array constructor at (1)

我可以通过填充 spaces 使所有字符串像这样相等来使其工作

 character(len=5) :: s(3)=["a ","bb","c "]

但这对于我的实际示例来说有点乏味,因为我有一些很长的字符串,所以有很多 space-bar-pressing-while-counting-out-loud... 是有一种方法可以初始化具有可变长度变量的字符数组,即某种自动填充?

需要在数组构造函数中手动指定type-spec,如

character(len=5) :: s(3) = [character(len=5) :: "a", "bb", "c"]

这会将数组中的每个元素转换为相同类型,character(len=5),这样数组构造函数是合法的。