我的c代码
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
void format_time(char * argc, char ** output, int *n){
time_t rawtime;
struct tm * timeinfo;
char out[100];
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strftime(out, 100, argc, timeinfo);
*output = out;
printf("%s\n",*output);
*n = strlen(*output);
}
我的 Fortran 代码
program name
use iso_c_binding
implicit none
interface
subroutine test(inp, out, n) bind(c,name= 'format_time')
use iso_c_binding
character(kind=c_char),intent(in) :: inp(*)
integer(kind=c_int),intent(out) :: n
type(c_ptr) :: out
end
end interface
character(kind=c_char, len=50), pointer :: timestr
type(c_ptr) :: tt
integer(c_int) :: nn
call test("%B"//c_null_char, tt, nn)
call c_f_pointer(tt,timestr)
print *, timestr !<-- prints junk
print*, nn
end program name
输入字符串正确地传递给 c 函数,从 c 函数内部的打印可以明显看出,但输出不起作用。如何解决这个问题?