포인터에 대한 포인터를 기대하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!