可以使用所谓的延迟长度字符变量。这些不是固定不变的长度,它们的使用可以在诸如a related one about data input之类的问题中找到。
但是,即使使用了延迟长度变量(因为这是语法)
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
当然,可以创建一个包装子例程,它确实采用可分配的延迟长度字符变量并完成所有工作。