オブジェクトへのポインタを期待する 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 中国語 Web サイトの他の関連記事を参照してください。