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

标签 string fortran

character(20) :: a='', b当我定义字符串 ='', 获取空字符串的值。我没有初始化 b , 所以 b 没有值(value)。我认为内存地址已经分配给 b 正如它们所定义的那样。但是,空刺和无值(value)有什么区别?

最佳答案

请注意 Fortran 中的意外行为,声明中的初始化意味着 save属性,这意味着初始化仅在第一次调用函数/子例程时有效,以后写入字符串的内容将保留在以后的调用中。使函数成为纯函数、元素函数或递归函数将导致编译错误。
一般来说,你应该在声明之后初始化!
所以一般来说,变量应该只声明为 character(20) :: a .现在 a在内存中分配,通常在该内存序列中写入的任何内容都将是变量包含的内容,直到您分配给它。如果在没有先赋值的情况下打印它,您将看到这些内存字节的字符串解释。
例如

program t
    character (20) :: hej
    print*,hej
end program 
运行几次时(在带有 gcc 的 ubuntu 中)给出这些随机的东西:
�Ʋ
86+
^�K
VBd�
&��A

关于string - 在 Fortran 中,空字符串和未初始化的字符串有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68016436/

相关文章:

c# - 一个字符串在 x64 中占用多少字节?

string - 对数字字符串求和

c - 使用 fgets 读取文本文件时出现奇怪的符号

linux - Fortran 在锁定环境中的基本单元测试

compilation - Fortran 中的共享对象从多个源文件链接到单个库

c++ - 与 gcc、g++ 和 gfortran 链接

每次运行时 Java 字符串到字节数组的变化

php - 在字符串php中找到第二次出现的字符

c++ - 从 Fortran 调用 C++(链接问题?)

windows - 使用cygwin在Linux和Windows中编译的MPI fortran代码