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

Mary-Kate Olsen
リリース: 2024-11-27 05:35:14
オリジナル
724 人が閲覧しました

How Do I Safely Copy Go Strings to C `char*` Pointers Using CGO?

CGO を使用した Go 文字列の C char * ポインターへのコピー

Go では、CGO を介して C プログラミング言語の機能を利用できることが重要です。 。一般的なタスクの 1 つは、Go 文字列を C char * ポインターにコピーすることです。ただし、最初の質問で述べたアプローチ:

func copy_string(cstr *C.char) {
    str := "foo"
    C.GoString(cstr) = str
}
ログイン後にコピー

は正しくありません。 Go 文字列を C char ポインターにコピーする正しい方法には、C.CString 関数が含まれます。この関数は、Go 文字列を C スタイルの null 終了文字列に変換し、char ポインターに割り当てることができます。

cstr := C.CString(str)
ログイン後にコピー

C.CString が C 用のメモリを割り当てることに注意することが重要です。 -style 文字列ですが、自動的には解放されません。メモリ リークを回避するには、C.free 関数を使用して割り当てられたメモリを手動で解放することが重要です。

C.free(unsafe.Pointer(cstr))
ログイン後にコピー

これらの関数を使用すると、Go 文字列を C char * ポインタに正常にコピーでき、C.free 関数間のシームレスな統合が可能になります。 Go と C. 効率的かつ安全なコード実行を確保するために、メモリ管理を適切に処理することを忘れないでください。

以上がCGO を使用して Go 文字列を C `char*` ポインターに安全にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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