Fortran Coder

查看: 7638|回复: 2
打印 上一主题 下一主题

[文件读写] write(str1,*) str2 将字符串写进字符串

[复制链接]

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
跳转到指定楼层
楼主
发表于 2020-9-15 17:23:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 愤怒的三炮 于 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, 下载次数: 215)

QQ图片20200915172256.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

101

帖子

0

主题

0

精华

大师

F 币
670 元
贡献
299 点

规矩勋章元老勋章新人勋章

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

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
板凳
 楼主| 发表于 2020-9-16 09:46:35 | 只看该作者
胡文刚 发表于 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将字符串写进字符串的用法我也基本没用过,因为是修改代码而偶然出现的,好奇报错的原因。
如您所言,还是直接赋值最方便。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 11:30

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表