文字定数の宣言で、パラメータ文であれば文字数を数えなくても文字列長を*で宣言できるようです。
変数の場合は、初期値として文字定数を与えても、明示的に文字数を与えなければならないようです。
また、部分文字列の指定子は、文字定数にも使えるようです。
PROGRAM test IMPLICIT NONE CHARACTER(*), PARAMETER :: alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!' INTEGER :: i INTEGER, PARAMETER :: n0(4) =(/21, 8, 15, 27/), n1(9) = (/25, 1, 18, 1, 14, 1, 9, 11, 1/) ! DO i = 1, SIZE(n0) WRITE(*, *) 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!'(n0(i):n0(i)) END DO ! DO i = 1, SIZE(n1) WRITE(*, '(1x, a)', advance = 'no') alphabet(n1(i):n1(i)) END DO WRITE(*, *) STOP END PROGRAM test