Fortran 正在修剪目录路径的字符串

Fortran 正在修剪目录路径的字符串,fortran,Fortran,我正在尝试创建文件的完整路径,通过Read语句在中输入父文件夹: PROGRAM fileTest IMPLICIT NONE Character(LEN=20) :: dirpath,fullpath Write(6,*) 'Enter dir path' Read(*,'(a)') dirpath dirpath=TRIM(dirpath) fullpath=dirpath//'/file.abc' print*,fullpath END PROGRAM

我正在尝试创建文件的完整路径,通过
Read
语句在中输入父文件夹:

PROGRAM fileTest

  IMPLICIT NONE

  Character(LEN=20) :: dirpath,fullpath

  Write(6,*) 'Enter dir path'
  Read(*,'(a)') dirpath
  dirpath=TRIM(dirpath)
  fullpath=dirpath//'/file.abc'
  print*,fullpath

END PROGRAM fileTest
使用gfortran,代码可以编译,但是输入
/home/chris
会导致最终的print语句仍然给出

/home/chris         /file.abc
(请注意空格中的9个字符)


我怎样才能摆脱虚假的空格

之所以发生这种情况,是因为
dirpath
仍然是一个
字符(len=20)
变量,因此其内容在
dirpath=TRIM(dirpath)
之后再次填充空格。您必须按照以下方式进行修剪:

fullpath = trim(dirpath)//'/file.abc'
编辑:
作为可分配字符串的演示(请参阅我的注释),如果编译器支持以下功能,您应该能够更满意地处理任意字符串长度:

character(:), allocatable  :: fullpath
character(len=some_length) :: buffer

write(6,*) 'Enter dir path'
read(*,'(a)') buffer
fullpath = trim(buffer) // '/file.abc'

应自动分配字符串
fullpath
,以适应右侧的确切长度

谢谢-Fortran不是很直观,来自更现代的语言。。!不幸的是,对于字符串来说尤其如此。较新的F2003自动(重新)分配字符可分配项的功能有所帮助,但在这种情况下,如果您将
直接读入
(您必须先分配它)。模块
iso\u variabling\u string
可能对您有所帮助。它定义了一个可分配的字符串派生类型,重载了现有的字符过程/运算符,还添加了一些特定的I/O过程。这是正确的,但是
trim
只会从末尾提取条目-我习惯于使用
trim(adjustl(dirpath))从字符串的前面删除条目
@ChrisW将其与C中以null结尾的字符串溢出或与StringBuilder的复杂性进行比较,您不会发现有那么糟糕。