Fortran Coder

标题: Debug显示变量与实际值不同 [打印本页]

作者: andy8496    时间: 2015-4-15 00:18
标题: Debug显示变量与实际值不同
这两天在Debug的时候发现一个神奇的现象,鼠标指向变量显示的值与write到文件中的变量值不一样!!
这是一个字符串变量,鼠标指示只能显示前面几十个字符,后面的就全是空格了。
导致后面的运算也是错误的,但是write出来到文件中的变量值是没有问题的,
肯定代码是没有问题的,因为单拎出来写个小函数就一切正常,问题就无法再现。
快被这个问题搞崩溃了。

作者: andy8496    时间: 2015-4-15 00:26
本帖最后由 andy8496 于 2015-4-15 02:21 编辑

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

test.rar

358.59 KB, 下载次数: 10


作者: 楚香饭    时间: 2015-4-15 19:54
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 ,也可以正常输出空格(如果有空格的话)

作者: li913    时间: 2015-4-15 19:55
可以试试输出到屏幕看看。变量监视器所显示的值不一定正确或完全,代码也许没错。
作者: 楚香饭    时间: 2015-4-15 19:56
楼主可以用这段代码测试来看看

[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

作者: andy8496    时间: 2015-4-16 02:19
终于搞定了,就是这个问题!谢谢二位了!热泪盈眶啊!




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