Fortran Coder

标题: write(str1,*) str2 将字符串写进字符串 [打印本页]

作者: 愤怒的三炮    时间: 2020-9-15 17:23
标题: write(str1,*) str2 将字符串写进字符串
本帖最后由 愤怒的三炮 于 2020-9-15 17:24 编辑

[Fortran] 纯文本查看 复制代码
character*20:: str= '  fortran    '
write(str,*) adjustl(str)
print*, str
end

这样运行时会出错(见下图);

但如果写成赋值的形式
[Fortran] 纯文本查看 复制代码
character*20:: str= '   fortran   '
str = adjustl(str)
print*, str
end
就不会有问题。
这是为什么呢?

QQ图片20200915172256.png (23.02 KB, 下载次数: 177)

QQ图片20200915172256.png

作者: 胡文刚    时间: 2020-9-15 21:26
第一
write(str,*) adjustl(str)
如果你把一个变量写入自身,可能会有问题。虽然语法没有明说,但不同编译器实现可能有不同的问题。
建议你换一个变量写入,比如
write(str2,*) adjustl(str)
第二
对于表控格式来说,写入可能会超出str2的定义长度。
建议用a格式符
write(str2,'(a20)') adjustl(str)
第三
直接赋值,效率更高,何必用write?

作者: 愤怒的三炮    时间: 2020-9-16 09:46
胡文刚 发表于 2020-9-15 21:26
第一
write(str,*) adjustl(str)
如果你把一个变量写入自身,可能会有问题。虽然语法没有明说,但不同编译 ...

感谢您的回复!
根据您的建议用Simply Fortran试了一下,发现问题就在于表控格式,需要控制格式写入。(adjustl函数需要控制格式,但是trim就可以是表控格式)

[Fortran] 纯文本查看 复制代码
character*20:: str= '   fortran   '

write(str,*) trim(str) !不会有问题

print*, str

end

用write将字符串写进字符串的用法我也基本没用过,因为是修改代码而偶然出现的,好奇报错的原因。
如您所言,还是直接赋值最方便。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2