在Fortran中,空字符串和未初始化字符串有什么区别?

高玉强*_*高玉强 3 string fortran

character(20) :: a='', b 当我定义字符串a ='' 时,a得到一个空字符串值。我没有初始化b,因此b没有值。我认为内存地址已按照定义分配给ab 。然而,空刺和无价值有什么区别呢?

Jon*_*röm 5

请注意 Fortran 中的意外行为,声明中的初始化意味着该save属性,这意味着初始化仅在第一次调用函数/子例程时有效,并且稍后写入字符串的任何内容都将在以后的调用中保留在那里。使函数成为纯函数、基本函数或递归函数将导致编译错误。

\n

一般来说,您应该在声明之后进行初始化!

\n

所以一般来说变量只能像这样声明character(20) :: a。Nowa是在内存中分配的,一般来说,在该内存序列中写入的内容都将是变量所包含的内容,直到您分配给它为止。如果您在没有先分配的情况下打印它,您将看到这些内存字节的字符串解释。

\n

例如

\n
program t\n    character (20) :: hej\n    print*,hej\nend program \n
Run Code Online (Sandbox Code Playgroud)\n

当运行几次时(在带有 gcc 的 ubuntu 中),给出这些随机的东西:

\n
\xef\xbf\xbd\xc6\xb2\n86+\n^\xef\xbf\xbdK\nVBd\xef\xbf\xbd\n&\xef\xbf\xbd\xef\xbf\xbdA\n
Run Code Online (Sandbox Code Playgroud)\n