Go에서 const char *의 C 배열에 액세스
const char Go에서 cgo를 사용합니다. 특히 C 배열의 문자열이 있고 이를 색인화하여 배열 항목을 Go 문자열로 변환하려고 합니다.
잘못된 접근 방식
현재 코드는 포인터 산술을 사용하여 이를 수행하려고 시도합니다.myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))그러나 이 접근 방식은 문자를 따라 인덱싱하기 때문에 올바르지 않습니다. 배열이 아닌 문자열의 것입니다. 결과적으로 전체 문자열 대신 각 문자열의 처음 몇 문자를 얻게 됩니다.
올바른 해결책
C 배열에 올바르게 액세스하려면 더 안전하고 먼저 Go 슬라이스로 변환하는 것이 더 편리합니다.import "unsafe" const arraySize = 3 cStrings := (*[arraySize]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }C 배열을 Go 슬라이스로 변환하면 반복할 수 있습니다. 해당 요소를 덮어쓰고 C.GoString()을 사용하여 각 요소를 Go 문자열로 변환합니다.
샘플 출력
이 접근 방식을 사용하면 C에서 전체 문자열을 가져올 수 있습니다. 배열(다음 샘플 출력에 표시됨):위 내용은 Go에서 `const char*` 문자열의 C 배열에 올바르게 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!