可変長文字列を使用してNetCDFから一部のデータを読み込もうとしています。 NetCDF呼び出しを使用するには、データを格納するのに十分な大きさの文字列を指定する必要があります。しかし、私は問題にぶつかっています。Fortranで動的に文字列を割り当てるときの問題
gfortranコンパイラの奇妙な動作の問題を取り除きました。少なくとも私はそうだと思いますが、Fortran 90の機能かもしれません。ここで
サンプルコードです:
program test
implicit none
integer clen,slen
character(len=:), allocatable :: string
clen = 10
allocate(character(len=clen) :: string)
slen = len(string)
write(6,*) 'clen,slen,dlen: ',clen,slen,len(string)
string = ' '
write(6,*) 'clen,slen,dlen: ',clen,slen,len(string)
string = 'test'
write(6,*) 'clen,slen,dlen: ',clen,slen,len(string)
end
私が割り当てられている文字列が、しかしサイズ10
であるため、すべての3つの書き込みステートメント「10 10 10」を取得するために期待されます、ここで私が得るものです:
clen,slen,dlen: 10 10 10
clen,slen,dlen: 10 10 1
clen,slen,dlen: 10 10 4
文字列は、私はそれに割り当てるたびに再割り当てされますかのように思われます。これは私が期待する行動ではありません。
gfortran(GNU Fortran(Debian 4.9.2-10)4.9.2)の古いバージョンを使用している可能性があります。私の質問です:この動作はコンパイラの新しいバージョンではなくなりますか、これはFortran 90の機能ですか?これが機能の場合、どうすればそれを避けることができますか?
あなたのコードはFortran 90と互換性がありませんが、Fortran 2003です。Fortran 90は非常に古く、時代遅れです.2017年です! –