如何解决C++ 函数中的字符数组与 Fortran 调用程序中的字符数组不对应
系统:
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 举报,一经查实,本站将立刻删除。