回 帖 发 新 帖 刷新版面

主题:求助一个F95书上的例题,谢谢求助,

最近自学彭国伦的F95,边学边在电脑上操作,发现彭的书上第45页,有个例子我照抄后运行不了,希望有高手帮忙看下是什么原因小弟不胜感激。原程序如下:
  program      ex0413
  character(len=20)  string
string="Good moring."
write(*,*)string
string(6)="evening."!重新设置从第6个字符之后的字符串
write(*,*)string
end
运行之后报错
Compiling Fortran...
D:\fortran\sdf\sdfa.f90
D:\fortran\sdf\sdfa.f90(9) : Error: This name has not been declared as an array.   [STRING]
string(6)="evening."!重新设置从第6个字符之后的字符串
^ Error executing df.exe.
sdf.exe - 1 error(s), 0 warning(s)
诚心求帮助,谢谢

回复列表 (共7个回复)

沙发

string(6)="evening."!重新设置从第6个字符之后的字符串
改为:
string(6:)="evening."!重新设置从第6个字符之后的字符串

板凳

说到这个,想起fortran处理字符很搞,能弄负长度的
character(len=-10)  string
string(3:)="12211"
write(*,*)string

这样可以顺利编译

如果改成
character(len=-10)  string
string(3:10)="12211"
write(*,*)string
就编译报错了……

3 楼

嗯,因为越界了:)

4 楼

这个我真不知道哦~

5 楼

字符串我没这么用过,但REAL数组我这样用过:)

6 楼

之前看<fortran 95/2003 Explained>的时候看到有一节专门讲Zero-sized array, 前面也提到Zero-sized string. 不过里面都只是提到下标大于上表的时候出现, 没说定义的时候可以直接负数. (今早翻了一下<The fortran 2003 handbook>大概也是那么说,而且都不详细,不过出现了一个定义real::B(0))

不知道直接定义一个负数维度是否违反标准?

而且看到后面C绑定的里面提到
However,C has no zero-sized arrays, so a Fortran array of size zero is not interoperable with any C array.
混编的话看来要避免zero-sized.

7 楼

混编时只要不是接口部分,用Zero size array还是没有问题的:)
不过用非1开始的下标时确实需要注意:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册