> 백엔드 개발 > Golang > Go에서 C `const char*` 배열에 액세스하는 방법은 무엇입니까?

Go에서 C `const char*` 배열에 액세스하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-26 13:40:11
원래의
413명이 탐색했습니다.

How to Access a C `const char*` Array from Go?

Go에서 const char * 유형의 C 배열에 액세스

문제

A C 프로그램 문자열 목록을 포함하는 myStringArray라는 이름의 const char * 유형 배열을 정의합니다. 목표는 cgo를 사용하여 Go 프로그램에서 이 배열에 액세스하고 각 배열 항목을 Go 문자열로 변환하는 것입니다.

토론

그러나 제공된 Go 코드는 실패합니다. 배열에 올바르게 액세스하는 대신 배열의 첫 번째 문자열 문자를 반복합니다. array.

솔루션

더 나은 접근 방식은 먼저 C 배열을 Go 슬라이스로 변환하는 것입니다. 이는 해당 요소에 더 편리하고 안전하게 액세스할 수 있는 방법을 제공합니다. 이를 수행하는 방법은 다음과 같습니다.

import "C"
import "fmt"

// Convert the C array into a Go slice of pointers to C (null-terminated) strings.
arraySize := 3
cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]

// Iterate over the slice and convert each C string into a Go string.
for _, cString := range cStrings {
    fmt.Println(C.GoString(cString))
}
로그인 후 복사

출력:

NAME_OF_FIRST_THING
NAME_OF_SECOND_THING
NAME_OF_THIRD_THING
로그인 후 복사

이 솔루션을 사용하면 각 배열 요소가 고유한 Go 문자열로 올바르게 액세스되도록 할 수 있습니다.

위 내용은 Go에서 C `const char*` 배열에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿