Fortran中的可分配字符变量

问题描述 投票:11回答:2

我的代码(简化为我认为与这个问题相关的内容)是这样的

PROGRAM test

IMPLICIT NONE

CHARACTER(len=37) input
CHARACTER(len=:), allocatable :: input_trim


WRITE(*,*) 'Filename?'
READ(*,*) input
ALLOCATE(character(len=LEN(TRIM(input))) :: input_trim)
input_trim=trim(input)

.
.
.

END PROGRAM test

在英特尔的Fortran编译器中工作正常,但是gfortran给了我几个错误,第一个错误是在行中说道

CHARACTER(len=:), allocatable :: input_trim

关于Fortran标准,我不知道哪个编译器是 "正确 "的。另外我也不知道如何用另一种方式来实现我需要的东西?我想我现在做的更多的是一种变通的方法。我需要的是一个字符变量,其中包含的正是输入的文件名,后面没有空格。

编辑:错误是 "CHARACTER声明中的语法错误".gfortran --version给我的是 "GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)"

EDIT 2:关于 allocate,你说的没错。有了ifort,我不需要它。而gfortran在这之前就崩溃了,所以也许它也不需要allocate,但我目前无法测试这个问题......

fortran character trim
2个回答
17
投票

这个

character (len=:), allocatable :: input_trim

在Fortran 2003中语法上肯定是正确的。你没有说这个错误是什么 gfortran raises是,所以我无法评论它为什么不接受这一行--也许你安装了一个旧版本的编译器。

如果使用最新的Fortran编译器 (蛋蛋 Intel Fortran v14.xxx),你不需要在分配字符变量之前分配它的大小,你可以简单地写下

input_trim = trim(input)

请注意

read(*,*) input_trim

不会工作。


0
投票

用Absoft Fortran,这个编译(还没有用它运行)。

character,dimension(:),allocatable::Line_for_IO !Metcalf,Reid,Cohen p. 107, w/mods
if(allocated(Line_for_IO)) deallocate(Line_for_IO)
allocate(Line_for_IO(7*n+40))
© www.soinside.com 2019 - 2024. All rights reserved.