CGO を使用して Go 文字列を C Char ポインターにコピーする
Go で CGO を使用する場合、一般的な要件は、Go 文字列を CGO にコピーすることです。 C の文字ポインタ。 Go 文字列を C ポインターに割り当てるのは簡単そうに見えますが、適切な方法には C.CString 関数の使用が含まれます。
不正なコピー試行
コード:
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
は、GoString が C char ポインタを Go 文字列に変換するのではなく、Go 文字列に変換することを目的としているため、正しくありません。同様です。
正しいコピー方法
CGO ドキュメントによると、Go 文字列を C 文字列に変換するには C.CString を使用する必要があります。
cstr = C.CString(str)
メモリ管理
次のことに注意してくださいC.CString は C 文字列にメモリを割り当てますが、解放しません。 C 文字列の使用が終了したら、
C.free(unsafe.Pointer(cstr))
を呼び出してこのメモリを解放するのはあなたの責任です。
以上がCGO を使用して Go 文字列を C Char ポインターに安全にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。