gpt4 book ai didi

c++ - 返回数组的 FORTRAN 函数导致段错误(从 C++ 调用)

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:59 25 4
gpt4 key购买 nike

基本上,这是我的问题。我正在从我的 C++ 代码中调用其他人的 FORTRAN 函数,这让我很头疼。一些代码:

function c_error_message()
character(len = 255) :: c_error_message
errmsg(1:9) = 'ERROR MSG'
return
end

那是 FORTRAN 函数。我的第一个问题是:里面有什么会导致段错误的吗?

如果不是,那么第二:返回什么?指针?我正在尝试使用以下 C 语句调用它:

char *e = c_error_message_();

这会导致段错误。

c_error_message();

这也会导致段错误。

我之前使用以下代码声明了 c_error_message_():

extern"C" {
char* c_error_message_();
}

声明一个返回类型与实际返回类型不同的函数会导致段错误吗?

我很迷茫。感谢您的任何回复。

最佳答案

这是一个有效的方法。当我尝试将 ISO C 绑定(bind)与返回字符串的函数一起使用时,编译器反对。因此,如果您改为使用子例程参数:

subroutine fort_err_message (c_error_message) bind (C, name="fort_err_message")

use iso_c_binding, only: C_CHAR, C_NULL_CHAR

character (len=1, kind=C_CHAR), dimension (255), intent (out) :: c_error_message

character (len=255, kind=C_CHAR) :: string
integer :: i

string = 'ERROR MSG' // C_NULL_CHAR

do i=1, 255
c_error_message (i) = string (i:i)
end do

return

end subroutine fort_err_message

Fortran 有点笨拙,因为从技术上讲,C 字符串是一维字符数组。

以及示例 C 代码来演示它是否有效:

#include <stdio.h>

void fort_err_message ( char chars [255] );

int main ( void ) {

char chars [255];

fort_err_message ( chars );

printf ( "%s\n", chars );

return 0;

}

关于c++ - 返回数组的 FORTRAN 函数导致段错误(从 C++ 调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512528/

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