gpt4 book ai didi

c++ - Fortran 将字符*81 数组传递给 C/C++ 代码

转载 作者:行者123 更新时间:2023-11-27 22:58:15 30 4
gpt4 key购买 nike

我刚接触编程,我想在我的 C++ 代码中调用 Fortran 函数。问题是我不知道如何将 Fortran 字符 *81 数组传递给我的 C++。

fortran 代码如下:

subroutine func01(a)
implicit none
character*81 a(2)
write(*,*) a(1)
write(*,*) a(2)
end

C++ 代码如下:

#include <iostream>

extern "C"{
void func01_( const char **a );
}

int main()
{
const char *a[2];
a[0]="Hello world!";
a[1]="This is a test!";
func01_(a);
return 0;
}

我使用这个基本测试了我的 Fortran 代码

program pro01
character*81 a(2)
a(1)='Hello world!'
a(2)='This is a test!'
call func01(a)
end program pro01

'func01(a)' 运行良好。

感谢@PaulMcKenzie,我纠正了一些愚蠢的问题......

但是,当我编译 cpp 代码时,结果就像乱码一样:

 7
@L
@��n��@�UH�j��FP
@��n���U�շ�=��U�ྼ��� @��

我该怎么办?

最佳答案

以下代码似乎适用于 Linux(x86_64) 上的 gcc4,但不清楚它是否也适用于其他平台。 (如上所述,现代 Fortran 的 C 互操作性可能会有用。)

func01.f90

subroutine func01( a )
character(*) :: a( 2 )
print *
print *, "char length = ", len(a(1)), len(a(2))
print *, "raw a(1) : [", a(1), "]"
print *, "raw a(2) : [", a(2), "]"
print *, "trim : [", trim(a(1)), "] [", trim(a(2)), "]"
end

主要.cpp

extern "C" {
void func01_( char *c, const int len );
}

#include <iostream>
#include <cstring> // for memset()
int main()
{
const int lenmax = 30, numstr = 3; // changed char length to 30 to fit in the terminal
char a[ numstr ][ lenmax ];
std::string str[ numstr ];

str[0] = "moon"; str[1] = "mercury"; str[2] = "jupiter";

for( int k = 0; k < numstr; k++ ) {
memset( a[k], ' ', lenmax ); // fill space
str[k].copy( a[k], lenmax ); // copy at most lenmax char (no \0 attached)
}

func01_( a[0], lenmax );
func01_( a[1], lenmax ); // pass from mercury
return 0;
}

编译

$ g++ func01.f90 main.cpp -lgfortran

结果

char length =           30          30
raw a(1) : [moon ]
raw a(2) : [mercury ]
trim : [moon] [mercury]

char length = 30 30
raw a(1) : [mercury ]
raw a(2) : [jupiter ]
trim : [mercury] [jupiter]

关于c++ - Fortran 将字符*81 数组传递给 C/C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419704/

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