Fortran Coder

查看: 14745|回复: 5
打印 上一主题 下一主题

[调试器] Debug显示变量与实际值不同

[复制链接]

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
跳转到指定楼层
楼主
发表于 2015-4-15 00:18:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这两天在Debug的时候发现一个神奇的现象,鼠标指向变量显示的值与write到文件中的变量值不一样!!
这是一个字符串变量,鼠标指示只能显示前面几十个字符,后面的就全是空格了。
导致后面的运算也是错误的,但是write出来到文件中的变量值是没有问题的,
肯定代码是没有问题的,因为单拎出来写个小函数就一切正常,问题就无法再现。
快被这个问题搞崩溃了。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
沙发
 楼主| 发表于 2015-4-15 00:26:40 | 只看该作者
本帖最后由 andy8496 于 2015-4-15 02:21 编辑

VS2010+IVF2011
有人遇到同样的问题吗?

test.rar

358.59 KB, 下载次数: 10

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2015-4-15 19:54:37 | 只看该作者
1.Fortran的字符串是定长的,而不是变长的。没有结束符 \0
2.char(0) 在 Fortran 里被视为正常的字符。而不是空格
3. trim() 和 len_trim() 只能去除尾部的空格,并不去除尾部的 \0
4. index 也找不到 "sdfsd2     ",因为这里面有空格,而你的数据里都是 \0。
5.如果你 index "sdfsd2" 则可以找到
6.如果你 index "sdfsd2" // char(0) // char(0) 也可以找到
7.但是 index "sdfsd2    " 找不到,因为 \0 不是空格
8.调试时,你无法看到 \0 后面的内容。因为调试器是 C 语言写的,而不是 Fortran 写的。
9.输出到文件时,可以正常输出 \0 ,也可以正常输出空格(如果有空格的话)

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2015-4-15 19:55:52 | 只看该作者
可以试试输出到屏幕看看。变量监视器所显示的值不一定正确或完全,代码也许没错。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

5#
发表于 2015-4-15 19:56:39 | 只看该作者
楼主可以用这段代码测试来看看

[Fortran] 纯文本查看 复制代码
character(len=6) :: c
c = "ab" // char(0) // "cd" // char(0)
write(*,*) index(c,"ab")
write(*,*) index(c,"cd")
write(*,*) len_trim(c)
end

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
6#
 楼主| 发表于 2015-4-16 02:19:41 | 只看该作者
终于搞定了,就是这个问题!谢谢二位了!热泪盈眶啊!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-4 17:52

Powered by Tencent X3.4

© 2013-2024 Tencent

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