Beim Aufruf einer C-Funktion, die einen Zeiger auf einen Zeiger auf eine erwartet Array von Strings, wie kann dies in Go erreicht werden, während gleichzeitig der C-Funktion ermöglicht wird, den String zu ändern? Array?
Das Erstellen eines Slice in Go und die direkte Übergabe an eine C-Funktion ist aufgrund von Unterschieden in den Datenstrukturen und der Speicherzuweisung nicht möglich. Stattdessen ist es notwendig, das Array in C zuzuordnen.
// 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)))
Durch die Zuweisung des Arrays in C kann die C-Funktion das Array ändern und seine Größe ändern. Die in C vorgenommenen Änderungen werden im Go-Slice widergespiegelt, nachdem die C-Funktion zurückkehrt.
Das obige ist der detaillierte Inhalt vonWie übergebe ich ein Go-Slice an eine C-Funktion, die einen Zeiger auf einen Zeiger auf ein Array von Strings ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!