C到Fortran调用问题

时间:2009-04-23 20:55:41

标签: c visual-studio-2008 fortran

在Windows 64上使用带有Intel Fortran 10.1的Visual Studio 9

我有一个调用Fortran的C函数,传递一个文字字符串“xxxxxx”(非空终止)和隐藏的传递长度arg 6.

Fortran正确,因为调试器识别它是一个字符(6)var并且具有正确的字符串,但是当我尝试为其分配另一个Fortran字符* 6 var时,我得到了最奇怪的错误。

  

forrtl: severe (408): fort: (4): Variable Vstring has substring ending point 6 which is greater than the variable length 6

- C电话 -

SETPR("abcdef",6);

- Fortran子程序 -

subroutine setpr(vstring)

character*(*) vstring

character*6 prd

prd(1:6) = vstring(1:6)

return

end

1 个答案:

答案 0 :(得分:1)

我尝试使用英特尔C编译器和英特尔Fortran编译器。这在C中给出了

#include <stdio.h>

int main(void)
{
    extern void test_f_(char*, int);

    test_f_("abcdef",6);
}

并且,在Fortran中,

subroutine test_f(s)
    implicit none
    character*(*), intent(in) :: s

    character*6 :: c

    write (*,*) 'S is ', s
    write (*,*) 'Length of S is', len(s)

    c = s
    write (*,*) 'Implicit-copied C is ', c

    c(1:6) = s(1:6)
    write (*,*) 'Range-copied C is ', c
end subroutine test_f

编译并运行时,会生成

S is abcdef
Length of S is           6
Implicit-copied C is abcdef
Range-copied C is abcdef

对于Fortran例程的类型,您在C例程中的声明是什么?你确定C和Fortran代码之间的字符和整数变量的大小是一样的吗?