C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환
C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환
C에 있는 문자열(끝에 널 문자로 끝나는 연속된 문자의 나열)을 Fortran의 가변 길이 문자열 포인터로 연결해 다루고 싶을 때가 있어요. C_F_STRPOINTER는 C 문자열을 Fortran 문자열(배열) 포인터와 연결해줘요.
본문
CALL C_F_STRPOINTER(CSTRARRAY, FSTRPTR[, NCHARS])
CALL C_F_STRPOINTER(CSTRPTR, FSTRPTR, NCHARS)
설명(Description)
C_F_STRPOINTER(CSTRARRAY, FSTRPTR[, NCHARS])는 지연 길이(deferred-length) 문자 포인터 FSTRPTR을 단순 연속(simply contiguous) Fortran 문자 배열 STRARRAY의 시작 부분 문자열과 포인터 연관시켜요. 연결 범위는 첫 널 문자까지, NCHARS가 지정되면 그 길이까지, 아니면 CSTRARRAY의 실제 크기까지예요.
CALL C_F_STRPOINTER(CSTRPTR, FSTRPTR, NCHARS)는 지연 길이 배열 포인터 FSTRPTR을 C 포인터 CSTRPTR이 가리키는 연속된 문자 배열의 시작 부분 문자열과 연결하는데, 범위는 첫 널 문자까지 또는 길이 NCHARS까지예요.
분류(Class)
서브루틴(Subroutine)
인자(Arguments)
CSTRARRAY— kindC_CHAR에 문자 길이가 1인 1차원 문자 배열이에요. 단순 연속이어야 하고TARGET속성이 있어야 해요.INTENT(IN)이에요.CSTRPTR—C_PTR타입의 스칼라예요.INTENT(IN)이에요.FSTRPTR— kindC_CHAR의 지연 길이 문자 포인터 스칼라예요.INTENT(OUT)이에요.NCHARS— (선택) 정수 스칼라예요.INTENT(IN)이에요.STRARRAY가 가정 크기(assumed-size)가 아닐 때만CSTRARRAY형태에서 이 인자를 생략할 수 있어요.
예제
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
13번째 위치에 널 문자(C_NULL_CHAR)를 넣어 C 문자열 길이를 12로 만들고, C 포인터와 배열 두 형태로 fp1·fp2를 그 문자열과 연결하는 예제예요.
표준(Standard)
Fortran 2023 이상
같이 보기
C_LOC — 객체의 C 주소 얻기, C_F_POINTER — C를 Fortran 포인터로 변환, C_F_PROCPOINTER — C를 Fortran 프로시저 포인터로 변환, F_C_STRING — Fortran 문자 스칼라를 C 문자열로 변환