在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
答案 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代码之间的字符和整数变量的大小是一样的吗?