> 백엔드 개발 > Golang > 문자열 배열에 대한 포인터에 대한 포인터를 수정하는 C 함수에 Go 슬라이스를 전달하는 방법은 무엇입니까?

문자열 배열에 대한 포인터에 대한 포인터를 수정하는 C 함수에 Go 슬라이스를 전달하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-07 15:05:13
원래의
495명이 탐색했습니다.

How to Pass a Go Slice to a C Function that Modifies a Pointer to a Pointer to an Array of Strings?

Go에서 Slice에 대한 포인터를 C 함수에 전달

문제

포인터에 대한 포인터를 기대하는 C 함수를 호출할 때 문자열 배열, C 함수가 문자열을 수정하도록 허용하면서 Go에서 이를 어떻게 달성할 수 있습니까? array?

해결책

Go에서 슬라이스를 생성하여 C 함수에 직접 전달하는 것은 데이터 구조와 메모리 할당의 차이로 인해 불가능합니다. 대신 C에서 배열을 할당해야 합니다.

// Allocate an array in C
cArray := C.malloc(C.size_t(c_count) * C.size_t(unsafe.Sizeof(uintptr(0))))

// Convert C array to Go array
a := (*[1<<30 - 1]*C.char)(cArray)

// Copy Go strings to C array
for index, value := range strs {
    a[index] = C.CString(value)
}

// Call C function with pointer to array pointer
err := C.f(&c_count, (***C.char)(unsafe.Pointer(&cArray)))
로그인 후 복사

C에서 배열을 할당하면 C 함수에서 배열을 수정하고 크기를 조정할 수 있습니다. C에서 변경된 내용은 C 함수가 반환된 후 Go 슬라이스에 반영됩니다.

위 내용은 문자열 배열에 대한 포인터에 대한 포인터를 수정하는 C 함수에 Go 슬라이스를 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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