Arrays 区别于;字符*10::a“;及;字符::a(10)“;

Arrays 区别于;字符*10::a“;及;字符::a(10)“;,arrays,syntax,fortran,Arrays,Syntax,Fortran,我试图为一个项目更新我的Fortran 90知识,但在使用内部文件时遇到了一些奇怪的情况。考虑示例代码: ! ---- internal_file_confusion.f90 ---- program internal_file_confusion implicit none character*40 :: string1 character :: string2(40) write(string1, *) "Hello World 1" write(*,*) "str

我试图为一个项目更新我的Fortran 90知识,但在使用内部文件时遇到了一些奇怪的情况。考虑示例代码:

! ---- internal_file_confusion.f90 ----
program internal_file_confusion
  implicit none 

  character*40 :: string1
  character :: string2(40)

  write(string1, *) "Hello World 1"
  write(*,*) "string1 = ", string1

  write(string2, *) "Hello World 2"
  write(*,*) "string2 = ", string2

end program 
当使用
gfortran
编译时崩溃,写入标准输出

 string1 =  Hello World 1                          
At line 10 of file e:/Daten/tmp/fortran-training/internal_file_confusion.f90
Fortran runtime error: End of record
当使用
*长度
表示法声明时,字符数组可用于内部写入,但当使用
名称(长度)
表示法声明时,字符数组不能用于内部写入。此外,我注意到
*length
表示法似乎只允许用于字符数组,而在出现错误消息(如

Error: Old-style type declaration INTEGER*40 not supported at (1)
对于其他数据类型


这些符号之间有什么区别,为什么会影响用作内部文件?

character*40::string
是长度为40的字符串

字符::字符串*40
是相同的

字符(len=40)::string
也是长度为40的字符串

character::string(40)
是长度为1的40个字符串的数组


character*40::string(40)
是长度为40的40个字符串的数组

字符::字符串(40)*40
相同

字符(len=40)::string(40)
是由40个长度为40的字符串组成的数组

第二次内部写入失败,因为它写入数组
string2
中的第一个字符串。第一个字符串
string2(1)
只有1个字符长,太短了。因此,您会遇到记录结束错误情况,消息对于提供的字符串来说太长


内部写入将数组元素视为单独的记录(类似于单独的行)。如果有更多记录(行)写入数组,则可以在内部写入中使用字符串数组。

使用标记,仅将版本用于版本特定的问题,并且仅作为添加项。你的问题即使在以后的版本中也是有效的(90已经很老了)。Stackoverflow就像facebook。几年后,你遇到了自己的博文,看着你年轻、知识较少的自己,你会觉得很奇怪。