String 名称列表中的fortran动态字符串

String 名称列表中的fortran动态字符串,string,dynamic,file-io,fortran,String,Dynamic,File Io,Fortran,为了将准动态字符串用于名称列表,我编写了以下代码 program main implicit none integer::inputlen character(len=:),ALLOCATABLE::input namelist /ttdata/ input,inputlen ALLOCATE(character(len=10) :: input) input(:)=' ' print *,'1.input="',

为了将准动态字符串用于名称列表,我编写了以下代码

    program main
implicit none
      integer::inputlen
      character(len=:),ALLOCATABLE::input
      namelist /ttdata/ input,inputlen

      ALLOCATE(character(len=10) :: input)
      input(:)=' '
      print *,'1.input="',input,'"'

      open ( unit=10,STATUS='OLD',file='input.namelist')
      read(10,nml=ttdata)
      print *,'2.input="',input,'"'
      if(inputlen.gt.10) then
        close(10)
        deallocate(input)

        allocate(character(len=inputlen) :: input)
        input(:)=' '
        print *,'3.input="',input,'"'
        open ( unit=10,STATUS='OLD',file='input.namelist')
      endif
      read(10,nml=ttdata)
      print *,'4.input="',input,'"'
     close(10)

end
input.namelist

&ttdata
  inputlen=20,
  input='123456789012345'/
输出

 1.input="          "
 2.input="1234567890"
 3.input="                    "
 4.input="1234567890          "
我扩展了输出

    ...
   4.input="123456789012345      "
似乎内存是以精确的方式分配的,但读取到名称列表是错误的。 使用pgfortran ce。 我做错了什么?或者我能为程序的正确行为做些什么

原来它一直是x86-64 Linux-tp core2上的pgfortran 17.4-0 64位目标。gfortran工作得很好

从pgroup:

我已使用最新的17.9版本成功复制了您的行为 释放。我们已将问题分配给TPR 24817


事实证明,解决这个问题的更好方法是使用替代编译器

该问题已报告给技术支持并得到确认

我已使用最新的17.9版本成功复制了您的行为 释放。我们已将问题分配给TPR 24817


我做错了什么?您没有将
implicit none
作为程序的第一行(在
program
开头的行之后,以及任何
使用的
语句,也就是说,但是从您所显示的内容来看,您可能根本没有这些行)。您没有将
implicit none
作为程序的第一行来编写。您没有将
implicit none
作为程序的第一行来编写。您没有将
implicit none
作为程序的第一行编写。为了加强前面的评论,我怀疑示例输出是否是示例程序的结果:
print*,'3.inputp=“”,inputp'”
在程序中,但输出看起来像
3.input=“
。请将程序原样显示出来,并列出示例的完整代码。隐式无操作。隐式无操作。当然,它可以防止使用以前没有声明过的变量,并使您能够修改代码以消除输入错误。在这个阶段,您需要非常清楚地描述您仍然面临的问题。对我来说,(修改后的)代码和输入文件工作正常。您使用哪个编译器、哪个版本和哪个标志?我们必须测试你的精确代码和输入文件。