问题描述
系统:
Mac OSX Catalina
GCC 10,GFORTRAN 10
我有一个调用 C++ void 函数的简单 Fortran 程序。目的是根据我在示例中找到的内容将字符串从 Fortran 传递到 C++ 的玩具示例,但有些地方不对
# subf.f90
program main
use iso_c_binding
character(len=256),target :: a_string
interface
subroutine print_string(fortran_string) Bind(C)
use iso_c_binding
TYPE(C_PTR) :: fortran_string
end subroutine print_string
end interface
a_string = "Hello world" // C_NULL_CHAR
print *,"trying to print: ",trim(a_string)
print *,"a string of length: ",len(trim(a_string)) - 1
call print_string(C_LOC(a_string))
end program main
// sub.cpp
#include <iostream>
#include <string>
#include <cstring>
extern "C" {
void print_string(const char * fortran_string);
}
void print_string(const char* fortran_string) {
std::string forstring(fortran_string);
std::cout << "sizeof fortran_string: " << sizeof fortran_string << std::endl
<< "strlen of fortran_string: " << strlen(fortran_string) << std::endl
<< "first char: " << fortran_string[0] << std:: endl
<< ".length(): " << forstring.length() << std::endl
<< "the actual string: `" << forstring << "`" << std::endl;
}
我用 g++-10 sub.cpp -c && gfortran subf.f90 sub.o -o sub -lstdc++ && ./sub
编译和运行
第一个字符似乎总是p
,传入的字符串大小总是一样的,但是p
是从哪里来的?,为什么字符串是垃圾?为什么大小与我从 fortran 发送的不匹配?
> ./sub
trying to print: Hello world
a string of length: 11
sizeof fortran_string: 8
strlen of fortran_string: 6
first char: p
.length(): 6
the actual string: `p$??`
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)