Fortran代码:
program TestFortran
implicit none
call char();
end program TestFortran
!char型
subroutine char ()
implicit none
character(3) ::c1
character(3) ::c2
c1 = "1.2"
c2 = "3.4"
call CHARR(c1, c2)
end subroutine char
end subroutine sub
C++代码:
//char型
extern "C" void CHARR(char *a, char *b)
{
return;
}
问题描述:Fortran调用C++中的CHARR函数,传参为字符型变量。
我想要C++得到a == 1.2, b == 3.4.
但是实际发现a的值为1.2 3.4,b的值为3.4
请问怎么解决问题?我想要a的值为Fortran中c1的值,b的值为Fortran中c2的值.
是不是将C1与C2的空间变为4个,就行了。
如还不行的话,可以如此:
先定义C1为4个或以上的空间。(至少要比实际存储的字符串长度加1个)
然后,先清0,再赋值。如
memset(c1, 0, sizeof(c1)).
c1="1.2"
C2等同处理,即可了。
诸位请看,如果调用函数的传参为real类型或者integer类型,那么就可以得到单个的值,而不是连续的值
Fortran代码:
!real型
subroutine real ()
implicit none
real ::r1
real ::r2
r1 = 1.0
r2 = 2.0
call REALL(r1, r2)
end subroutine real
C++代码:
void REALL(float *a, float *b) //a为1.0,b为2.0
{
float c = *a+ *b;
return;
}
我想要在a,b为字符型的时候,a==1.0 b = 2.0, 请问怎么实现?
不明白你的意思了。
根据你的图片看来,问题就出现在C1,C2两个字符串并没有以0x00结束了,这是肯定了。
我对fortan不熟,但一定要想办法在正常字符串结束处赋一个0x00了。
后来我在一篇文章中看到,这是因为Fortran的特性造成的,解决办法只能是在C++中在根据Fortran中定义字符型数据的大小去手动截取