Fortran Coder
标题: 内部文件使用报错Fortran runtime error: End of record [打印本页]
作者: xk6891 时间: 2024-7-19 16:58
标题: 内部文件使用报错Fortran runtime error: End of record
本帖最后由 xk6891 于 2024-7-19 17:00 编辑
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
program main
implicit none
integer charnum
character,allocatable::smi(:)
!!character(len=30)::smi
character(len=1)sinelem
character(len=2)douelem
charnum=30
allocate(smi(charnum))
smi=''
sinelem="A"
douelem="BB"
write(smi(1:1),"(A1)")sinelem
write(*,*)smi
write(smi(2:3),"(A2)")douelem
write(*,*)smi
end
出现报错
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
A
At line 16 of file test.f90
Fortran runtime error: End of record
Error termination. Backtrace:
单个字母是可以输入到内部文件的,多个字母就会出现这个错误。
看到有的帖子说是由于动态长度字符串的原因,因此把动态长度的字符串屏蔽掉,采用固定长度的字符串,是正常输出的
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
program main
implicit none
integer charnum
!!character,allocatable::smi(:)
character(len=30)::smi
character(len=1)sinelem
character(len=2)douelem
charnum=30
!!allocate(smi(charnum))
smi=''
sinelem="A"
douelem="BB"
write(smi(1:1),"(A1)")sinelem
write(*,*)smi
write(smi(2:3),"(A2)")douelem
write(*,*)smi
end
输出如下
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
A
ABB
问题出在哪里?
既然动态长度字符串的内部文件能够输入单个字母,应该不是动态长度与固定长度的问题吧?但也无更好解释
作者: fcode 时间: 2024-7-19 21:26
character,allocatable::smi(:)
这是一个字符数组,注意是数组。
所以 smi(2:3) 也是一个数组,有2个元素,每个元素长度都是1。
character(len=30)::smi
这是一个字符串(单变量)。
所以 smi(2:3) 是一个子字符串,单变量,长度为 2。
你可以用“递延长度字符串”来代替“可分配字符数组”[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
character(len=:) , allocatable :: smi
allocate( character(len=30)::smi )
deallocate(smi)
详解 http://diyanzifuchuan.w.fcode.cn/
作者: xk6891 时间: 2024-7-19 22:35
啊啊啊,对了,这是数组不是字符串。感谢大佬提醒,谢谢
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) |
Powered by Discuz! X3.2 |