fortran fortran中文资料网
手气不错
Article

054.characterLengthAssignment_字符长度、补空格与截断

2026年9月30日基础级

Fortran的character(len=n)对象具有固定长度。赋值时,右侧较短会在右端补空格,右侧较长会从右端截断,左侧对象的声明长度不会随内容改变。这种规则常用于固定宽度编号、表格字段和传统文本记录;适合处理字段长度已由文件格式规定的情况,不适合在未知长度文本中悄然丢失尾部内容。

语法结构

character(len=n) :: text
text = character_expression
  • 右侧长度小于n时,先复制已有字符,再用空格补满左侧剩余位置。
  • 右侧长度大于n时,只保留最左侧n个字符;被截掉的字符不能从左侧变量中恢复。
  • 这是标准赋值语义,不是字符串末尾添加NUL字符。启用字符截断警告时,编译器可以提醒长度已知的截断。

本文代码

! 观察定长字符变量赋值时的补空格和截断。
program characterLengthAssignmentDemo
  implicit none

  character(len=8) :: materialCode
  character(len=11) :: sourceText

  materialCode = "Fe"
  write (*, "(A,A8,A)") "短值赋值:|", materialCode, "|"

  sourceText = "temperature"
  materialCode = sourceText
  write (*, "(A,A8,A)") "长值赋值:|", materialCode, "|"
end program characterLengthAssignmentDemo

编译运行

(base) hong@hongdeMacBook-Pro 054.characterLengthAssignment % gfortran -Wall -Wextra -Wno-character-truncation -std=f2018 exampleCharacterLengthAssignment.f90 -o characterLengthAssignmentDemo
(base) hong@hongdeMacBook-Pro 054.characterLengthAssignment % ./characterLengthAssignmentDemo
短值赋值:|Fe      |
长值赋值:|temperat|

现象分析

materialCode的长度固定为8。字符串Fe只有2个字符,因此赋值后右侧自动补入6个空格;竖线把这些不可见空格的范围显示出来。

temperature共有11个字符。赋给长度8的materialCode后,只保留前8个字符temperat,最后3个字符ure被截去。

程序中的sourceText只是让较长来源单独可见。即使来源是变量,赋值规则仍由左右两侧的字符长度决定。

核心知识点

  • character变量的长度是类型参数,普通赋值不会改变该长度。
  • 短值右侧补空格,长值右侧截断;两种处理都发生在赋值时。
  • 输出或比较定长字符时,需要意识到尾部空格仍属于字符值。
  • 重要文本若不允许丢失,应在赋值前检查长度,或在后续课程中使用延迟长度字符。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注