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=“
。请将程序原样显示出来,并列出示例的完整代码。隐式无操作。隐式无操作。当然,它可以防止使用以前没有声明过的变量,并使您能够修改代码以消除输入错误。在这个阶段,您需要非常清楚地描述您仍然面临的问题。对我来说,(修改后的)代码和输入文件工作正常。您使用哪个编译器、哪个版本和哪个标志?我们必须测试你的精确代码和输入文件。