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 중국어 웹사이트의 기타 관련 기사를 참조하세요!