MODULE testcfstr_mod IMPLICIT none (external, type) PRIVATE ! ABSTRACT INTERFACE INTEGER(KIND=C_INT) FUNCTION strlen_z(ptr) BIND(C) USE ISO_C_BINDING, ONLY : C_INT, C_PTR TYPE(C_PTR),VALUE :: ptr END FUNCTION strlen_z END INTERFACE PROCEDURE(strlen_z),PUBLIC, BIND(C, NAME='strlen') :: strlen ! END MODULE testcfstr_mod ! PROGRAM testcfstr USE ISO_C_BINDING, ONLY : C_PTR, C_LOC, C_F_STRPOINTER, F_C_STRING, C_ASSOCIATED USE ISO_FORTRAN_ENV, ONLY : COMPILER_VERSION USE testcfstr_mod, ONLY : strlen IMPLICIT none (external, type) CHARACTER(LEN=9),TARGET :: string_in CHARACTER(LEN=:),POINTER :: string_out TYPE(C_PTR) :: pString INTEGER :: length INTEGER :: iPos ! write(*,*) 'Compiler version: ', COMPILER_VERSION() ! string_in = F_C_STRING("abcdefgh") pString = C_LOC(string_in) write(*,*) 'c_associated: ', C_ASSOCIATED(pString) length = strlen(pString) write(*,*) 'length:', length CALL C_F_STRPOINTER(pString, string_out, length) write(*,*) 'associated: ', ASSOCIATED(string_out) ! <<<<<<<<<<<<<<<<<<<<<<< wrong? write(*,*) 'string out: ', string_out//"<<" ! works fine here, but fails elsewhere iPos = INDEX(string_out, "bc") ! works fine here, but fails elsewhere write(*,*)'ipos', ipos ! STOP END PROGRAM testcfstr