Fortran Coder

查看: 46|回复: 2

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

[复制链接]

5

帖子

2

主题

0

精华

入门

F 币
69 元
贡献
38 点
发表于 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
回复

使用道具 举报

59

帖子

0

主题

0

精华

专家

F 币
425 元
贡献
188 点

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

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

5

帖子

2

主题

0

精华

入门

F 币
69 元
贡献
38 点
 楼主| 发表于 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将字符串写进字符串的用法我也基本没用过,因为是修改代码而偶然出现的,好奇报错的原因。
如您所言,还是直接赋值最方便。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-9-27 08:17

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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