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

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

Mary-Kate Olsen
リリース: 2024-12-01 08:11:10
オリジナル
976 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート