Я пытаюсь вызвать глобальную строковую переменную, которая определена в подпрограмме Fortran, в C. код C равен Cfile.c
:
#include <stdio.h>
typedef struct {
int length;
char* string;
} fstring;
extern fstring stringf_;
void fortfunc_();
int main() {
fstring stringC = stringf_;
stringC.string[stringC.length-1] = '\0';
printf("%s \n",stringC.string);
return 0;
}
а код FORTRAN - Ffile.f
:
subroutine fortfunc()
character*30 string
common/stringF/ string
string = 'this is a string in FROTRAN77'
return
end
он компилируется с:
gcc -c Cfile.c
gfortran -c -std=legacy Ffile.f
gfortran -c file.out -std=legacy Cfile.o Ffile.o
но при запуске я получаю ошибку сегментации. Но я не понимаю, когда нарушаю границы памяти.
Моя операционная система:
Linux ubuntu 4.15.0-39-generic # 42-Ubuntu SMP Вт 23 октября 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
и мои компиляторы:
GNU Fortran (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) 7.3.0
gcc (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) 7.3.0
Буду признателен, если вы поможете мне узнать, в чем моя ошибка и как я могу ее исправить? также приветствуются другие решения для определения глобальной переменной в Фортране и последующего ее вызова в Си.
stringC.length
является допустимым (›0), прежде чем использовать его в качестве индекса. - person Aganju   schedule 01.12.2018