返回字符的Fortran函数

问题描述:

我有一个返回字符串的函数。在Fortran中有 要求输出的长度必须定义,并且不能为 (len=*)。我不确定当我将函数调用 时可能遇到什么问题,并且字符串比大小在 函数声明。返回字符的Fortran函数

Function real_to_str_new & 
    (      & 
    r, fmt    & 
)      & 
    Result (s) 

Real, Intent(in) :: r 
Character (len=*), Intent(in) :: fmt 

Character (len=65) :: s 

这有一个函数的结果不是很重要,问题如下分配规则。

在(固有)分配,你必须variable = expr字符类型,规则7.2.1.3, 10是:

对于变量为字符类型的内部赋值语句,expr可能具有不同的字符长度参数,在这种情况下expr转换为变量长度如下。 (1)如果变量的长度小于expr的长度,则expr的值将从右边截断,直到它与变量的长度相同为止。 (2)如果变量的长度大于expr的长度,则expr的值在空白处右侧扩展,直到长度与变量的长度相同为止。

在这种情况下expr(如函数的结果)的长度参数65 variable将长度参数的声明(除非allocatable进场)。

+0

嗯---标准......在这种特殊情况下,我不会在标准基础上发展!我花了很多个小时来调试代码,其中比函数/子例程要长的字符串。看起来,至少'gfortran'并不总是正确地执行截断,导致将某些东西写入不属于它的内存中---你可以想象结果。最好确保字符串长度匹配。 – 2014-12-03 21:05:10

+0

在这种情况下(尽管您的体验听起来很有趣),但这与函数/子程序_arguments_无关。 – francescalus 2014-12-03 21:07:55