gpt4 book ai didi

arrays - 如何在 Fortran 中获取未知长度的命令行参数?

转载 作者:行者123 更新时间:2023-12-04 14:25:34 24 4
gpt4 key购买 nike

我想从用于运行程序的命令行中读取一些文本字符串。我正在使用内部子程序 GET_COMMAND_ARGUMENT在一个基本上是这样的程序中:

program test
character(len=100) :: argument
call GET_COMMAND_ARGUMENT(1,argument)
print*, argument
end program test

这里的问题是我觉得在编译时设置字符串的最大长度有点危险。一些参数通常是带有路径的文件,因此它们可能很长。涉及将长度静态设置为 1000 的解决方案听起来像一个丑陋的解决方法。

Fortran 中没有更优雅的方法来定义一个字符串,该字符串能够包含长度仅在运行时已知的字符链?

最佳答案

可以使用所谓的延迟长度字符变量。这些不是固定不变的长度,它们的使用可以在诸如 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

自然地,可以创建一个包装子例程,它确实采用可分配的延迟长度字符变量并完成所有工作。

关于arrays - 如何在 Fortran 中获取未知长度的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35153637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com