Next: Wisdom Generic Export/Import from Fortran, Previous: Wisdom File Export/Import from Fortran, Up: Accessing the wisdom API from Fortran
Dealing with FFTW's C string export/import is a bit more painful.  In
particular, the fftw_export_wisdom_to_string function requires
you to deal with a dynamically allocated C string.  To get its length,
you must define an interface to the C strlen function, and to
deallocate it you must define an interface to C free:
       use, intrinsic :: iso_c_binding
       interface
         integer(C_INT) function strlen(s) bind(C, name='strlen')
           import
           type(C_PTR), value :: s
         end function strlen
         subroutine free(p) bind(C, name='free')
           import
           type(C_PTR), value :: p
         end subroutine free
       end interface
   Given these definitions, you can then export wisdom to a Fortran character array:
       character(C_CHAR), pointer :: s(:)
       integer(C_SIZE_T) :: slen
       type(C_PTR) :: p
       p = fftw_export_wisdom_to_string()
       if (.not. c_associated(p)) stop 'error exporting wisdom'
       slen = strlen(p)
       call c_f_pointer(p, s, [slen+1])
       ...
       call free(p)
   
Note that slen is the length of the C string, but the length of
the array is slen+1 because it includes the terminating null
character.  (You can omit the ‘+1’ if you don't want Fortran to
know about the null character.) The standard c_associated function
checks whether p is a null pointer, which is returned by
fftw_export_wisdom_to_string if there was an error.
   
To import wisdom from a string, use
fftw_import_wisdom_from_string as usual; note that the argument
of this function must be a character(C_CHAR) that is terminated
by the C_NULL_CHAR character, like the s array above.