ホームページ >バックエンド開発 >Golang >CGO を使用して Go 文字列を C Char ポインターに安全にコピーするにはどうすればよいですか?

CGO を使用して Go 文字列を C Char ポインターに安全にコピーするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-01 08:11:10986ブラウズ

How Do I Safely Copy a Go String to a C Char Pointer Using CGO?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。