それは延期長文字変数と呼ばれるものを使用することが可能です。これらは一定の固定長ではなく、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
1はまだ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
にします。特に、1は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
当然、1つは、割り当て可能繰延長文字変数を取りましたし、すべてが仕事をしたラッパーサブルーチンを作成することができます。
あなたのアプローチははるかに良いです、どういうわけか私はこの議論を忘れました。 –
おそらく、このアプローチは 'get_environment_variable'でも動作することに注目する価値があります。 – francescalus
ありがとう、これは大きな助けとなり、確かに問題を解決します。なぜなら、より単純な 'allocate(argument(some_length)) 'の代わりに、むしろ複雑な' allocate(character(some_length):: argument) 'を必要とするからです。 – Onturenio