c_ptr_to_string Function

public function c_ptr_to_string(ptr) result(fstr)

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in) :: ptr

Return Value character(len=:), allocatable


Called by

proc~~c_ptr_to_string~~CalledByGraph proc~c_ptr_to_string c_ptr_to_string proc~get_cpu_architecture get_cpu_architecture proc~get_cpu_architecture->proc~c_ptr_to_string proc~get_os get_os proc~get_os->proc~c_ptr_to_string proc~output_system_log output_system_log proc~output_system_log->proc~get_cpu_architecture proc~output_system_log->proc~get_os interface~output_system_log type_output%output_system_log interface~output_system_log->proc~output_system_log

Source Code

    function c_ptr_to_string(ptr) result(fstr)
        type(c_ptr), intent(in) :: ptr
        character(len=:), allocatable :: fstr
        character(kind=c_char), pointer :: cstr(:)
        integer :: len, i

        ! 1) C ポインタを 256 要素の CHARACTER(C_CHAR) 配列にマップ
        call c_f_pointer(ptr, cstr, [256])

        ! 2) ヌル終端までカウント
        len = 0
        do while (len < 256 .and. cstr(len + 1) /= c_null_char)
            len = len + 1
        end do

        ! 3) allocatable 文字列を len で確保
        allocate (character(len=len) :: fstr)
        ! 4) 1文字ずつコピー
        do i = 1, len
            fstr(i:i) = cstr(i)
        end do
    end function c_ptr_to_string