为了对名单使用准动态字符串,我编写了以下代码
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。
答案 0 :(得分:1)