C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환

C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환

C에 있는 문자열(끝에 널 문자로 끝나는 연속된 문자의 나열)을 Fortran의 가변 길이 문자열 포인터로 연결해 다루고 싶을 때가 있어요. C_F_STRPOINTER는 C 문자열을 Fortran 문자열(배열) 포인터와 연결해줘요.

출처: gfortran 공식 문서 - C_F_STRPOINTER

본문

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 — kind C_CHAR에 문자 길이가 1인 1차원 문자 배열이에요. 단순 연속이어야 하고 TARGET 속성이 있어야 해요. INTENT(IN)이에요.
  • CSTRPTRC_PTR 타입의 스칼라예요. INTENT(IN)이에요.
  • FSTRPTR — kind C_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 문자열로 변환