可以使用所谓的延迟长度字符变量。它们的长度不是固定不变的,它们的使用可以在诸如以下的问题中找到:与数据输入相关的一篇 https://stackoverflow.com/q/31084087.
然而,即使使用像这样的延迟长度变量(因为这是语法)
character(len=:), allocatable :: argument
allocate(character(some_length) :: argument) ! For integer some_length
call GET_COMMAND_ARGUMENT(1,argument)
print*, argument
end
仍然需要担心什么some_length
应该。如果我们只选择 100,我们就会回到原来的状态。
我们必须担心这个,因为get_command_argument
不接受这样的延迟长度参数并将其分配给所需的长度。那是
character(len=:), allocatable :: argument
call GET_COMMAND_ARGUMENT(1,argument) ! Will argument be allocated in the subroutine?
print*, argument
end
给出的答案是“不”。
接下来,我们来看看处理这个问题的其他(可选)参数get_command_argument
。特别值得一提的是,有一种叫做length
:
character(len=:), allocatable :: argument
integer arglen
call GET_COMMAND_ARGUMENT(1,length=arglen)
allocate(character(arglen) :: argument)
call GET_COMMAND_ARGUMENT(1,value=argument)
print*, argument
end
当然,我们可以创建一个包装子例程,该子例程确实采用可分配的延迟长度字符变量并完成所有工作。