C_F_STRPOINTER — Convert C string into Fortran string pointer ¶CALL C_F_STRPOINTER(CSTRARRAY, FSTRPTR[, NCHARS]) |
CALL C_F_STRPOINTER(CSTRPTR, FSTRPTR, NCHARS) |
C_F_STRPOINTER(CSTRARRAY, FSTRPTR[, NCHARS])
pointer-associates the deferred-length character pointer
FSTRPTR with the initial substring of the simply contiguous
Fortran character array STRARRAY, up to the first null character,
the length NCHARS if specified, or the actual size of CSTRARRAY.
CALL C_F_STRPOINTER(CSTRPTR, FSTRPTR, NCHARS)
pointer-associates the deferred-length array pointer FSTRPTR with the
initial substring of the continguous array of characters pointed to by
the C pointer CSTRPTR, up to the first null character or
length NCHARS.
Subroutine
| CSTRARRAY | Rank-one character array of kind C_CHAR
and character length one, which must be simply contiguous and have the
TARGET attribute. It is INTENT(IN). |
| CSTRPTR | Scalar of the type C_PTR. It is
INTENT(IN). |
| FSTRPTR | Scalar deferred-length character pointer of kind
C_CHAR. It is INTENT(OUT). |
| NCHARS | (Optional) Integer scalar. It is INTENT(IN).
This argument can only be omitted for the CSTRARRAY form of the
intrinsic, and only if STRARRAY is not assumed-size. |
program main
use iso_c_binding
implicit none
character (kind=c_char, len=1), dimension(15), target :: a
type(c_ptr) :: p
character (len=:, kind=c_char), pointer :: fp1, fp2
a = [ character :: 'h', 'e', 'l', 'l', 'o', ' ', &
'w', 'o', 'r', 'l', 'd', '!', &
' ', ' ', ' ']
! give array a terminating null so its C string length is 12.
a(13) = C_NULL_CHAR
! p is a C pointer to the the first character in the array
p = C_LOC (a(1))
! Make both fp1 and fp2 point to a with Fortran string length 12.
call c_f_strpointer (p, fp1, 15)
call c_f_strpointer (a, fp2)
end program main
Fortran 2023 and later.
C_LOC — Obtain the C address of an object,
C_F_POINTER — Convert C into Fortran pointer,
C_F_PROCPOINTER — Convert C into Fortran procedure pointer,
F_C_STRING — Convert Fortran character scalar to C string