关于Fortran调用C++的函数,函数传参为字符型。

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中定义字符型数据的大小去手动截取