gpt4 book ai didi

c - C到Fortran调用问题

转载 作者:行者123 更新时间:2023-12-04 11:17:47 25 4
gpt4 key购买 nike

在Windows 64和Intel Fortran 10.1上使用Visual Studio 9

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

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


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

最佳答案

我使用Intel C编译器和Intel 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


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

关于c - C到Fortran调用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com