我在 Fortran 和 C 之间传递字符串时遇到问题。
Fortran 子例程调用如下所示:
CALL MMEINITWRAPPER(TRIM(ADJUSTL(PRMTOP)), 0, SALTCON, RGBMAX, CUT)
与此一起使用的 C 具有签名:
int mmeinitwrapper_(char *name,
int *igb,
REAL_T *saltcon,
REAL_T *rgbmax1,
REAL_T *cutoff1)
我在不同的地方放了一些打印语句,一切正常,直到我用 ifort 编译。在这种情况下,输出如下所示:
Topology file name:
coords.prmtop
coords.prmtop
Topology file name length: 81 13
length in C: 8
read argument: coords.prmtop��*
Reading parm file (coords.prmtop��*)
coords.prmtop��*, coords.prmtop��*.Z: does not exist
Cannot read parm file coords.prmtop��*
使用波特兰编译器:
Topology file name:
coords.prmtop
coords.prmtop
Topology file name length: 81 13
length in C: 8
read argument: coords.prmtop
Reading parm file (coords.prmtop)
第一组中的长度来自未修剪/未调整字符串的 Fortran,然后是修剪/调整字符串。C 中的长度从sizeof(name)/sizeof(name[0])
.
它似乎传递了一段太长的内存,在随后的运行中,你会得到不同长度的坏东西(尽管 C 中报告的长度总是 8)。
有没有人有任何想法?很难让 gdb 与 Fortran/C 组合很好地配合使用。