Fortran中字符串数组的动态分配不会调整大小

Dav*_*idS 5 arrays string fortran

考虑以下Fortran程序:

program test
character(len=:), allocatable :: str
allocate(character(3) :: str)
print *, len(str)
str = '12345'
print *, len(str)
end program
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到了预期的结果:

   3
   5
Run Code Online (Sandbox Code Playgroud)

也就是说,当str设置为'12345'时,字符串的大小从3调整为5.相反,如果我使用动态字符串数组,则不然.例:

program test
character(len=:), allocatable :: str(:)
allocate(character(3) :: str(2))
print *, len(str(1)), len(str(2))
str(1) = '12345'
print *, len(str(1)), len(str(2))
end program
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

   3           3
   3           3
Run Code Online (Sandbox Code Playgroud)

所以str(1)的集合没有改变字符串的长度.我使用ifort 16.0.2和gfortran 5.3.1获得了相同的行为.我的问题是这种行为是否与最新的Fortran标准一致,或者这是编译器中的一个错误?

Vla*_*r F 5

这是正确的行为.可分配数组的元素本身不是可分配变量,不能在赋值时(或以任何其他方式)重新分配.此外,所有数组元素必须具有相同的类型 - 包括字符串长度.