Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Menyalin Rentetan Go dengan Selamat ke Penunjuk C `char*` Menggunakan CGO?

Bagaimanakah Saya Menyalin Rentetan Go dengan Selamat ke Penunjuk C `char*` Menggunakan CGO?

Mary-Kate Olsen
Lepaskan: 2024-11-27 05:35:14
asal
740 orang telah melayarinya

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

Menyalin Go Strings ke C char * Penunjuk Menggunakan CGO

Dalam Go, keupayaan untuk menggunakan keupayaan bahasa pengaturcaraan C melalui CGO adalah penting . Satu tugas biasa melibatkan penyalinan rentetan Go ke dalam penunjuk C char *. Walau bagaimanapun, pendekatan yang disebut dalam soalan awal:

func copy_string(cstr *C.char) {
    str := "foo"
    C.GoString(cstr) = str
}
Salin selepas log masuk

adalah salah. Kaedah yang betul untuk menyalin rentetan Go ke penunjuk C char melibatkan fungsi C.CString. Fungsi ini menukar rentetan Go kepada rentetan penamatan nol gaya C, yang boleh ditetapkan pada penunjuk char .

cstr := C.CString(str)
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa C.CString memperuntukkan memori untuk C rentetan gaya, tetapi tidak melepaskannya secara automatik. Untuk mengelakkan kebocoran memori, adalah penting untuk membebaskan memori yang diperuntukkan secara manual menggunakan fungsi C.free:

C.free(unsafe.Pointer(cstr))
Salin selepas log masuk

Dengan menggunakan fungsi ini, anda boleh berjaya menyalin rentetan Go ke dalam penunjuk C char *, membolehkan penyepaduan yang lancar antara Go dan C. Ingat untuk mengendalikan pengurusan memori dengan sewajarnya untuk memastikan pelaksanaan kod yang cekap dan selamat.

Atas ialah kandungan terperinci Bagaimanakah Saya Menyalin Rentetan Go dengan Selamat ke Penunjuk C `char*` Menggunakan CGO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan