РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1581 of 1593 menu

Функция C.CString

Функция C.CString преобразует строку типа string в строку типа *C.char, которая совместима с C-функциями, ожидающими const char*. Эта функция выделяет память в C-куче с помощью C.malloc и копирует в нее данные. Важно помнить, что выделенную память необходимо освобождать функцией C.free во избежание утечек памяти.

Функция принимает один параметр — строку Go (string). Возвращает указатель на C-строку (*C.char). Если переданная строка Go содержит символы, выходящие за пределы ASCII, они будут преобразованы в UTF-8, что соответствует стандартному поведению C-строк.

Синтаксис

C.CString(s)

Пример

Давайте преобразуем строку Go в C-строку и передадим ее в C-функцию, которая выводит строку в stdout:

package main /* #include <stdio.h> #include <stdlib.h> void printString(const char* str) { printf("%s\n", str); } */ import "C" import "fmt" func main() { goStr := "Hello, C!" cStr := C.CString(goStr) defer C.free(unsafe.Pointer(cStr)) C.printString(cStr) fmt.Println("C string printed successfully") }

Результат выполнения кода:

"Hello, C!" "C string printed successfully"

Пример

В этом примере мы преобразуем строку с не-ASCII символами и передадим ее в C-функцию для обработки:

package main /* #include <stdio.h> #include <stdlib.h> void printUTF8(const char* str) { printf("%s\n", str); } */ import "C" import "fmt" import "unsafe" func main() { goStr := "Привет, мир!" cStr := C.CString(goStr) defer C.free(unsafe.Pointer(cStr)) C.printUTF8(cStr) fmt.Println("UTF-8 string printed successfully") }

Результат выполнения кода:

"Привет, мир!" "UTF-8 string printed successfully"

Пример

Если не освободить память после использования C.CString, это приведет к утечке памяти. В этом примере показано, как правильно освободить память с помощью defer C.free:

package main /* #include <stdlib.h> */ import "C" import "unsafe" import "fmt" func main() { s := "Temporary string" cStr := C.CString(s) defer C.free(unsafe.Pointer(cStr)) // Используем cStr fmt.Printf("C string: %s\n", C.GoString(cStr)) }

Результат выполнения кода:

"C string: Temporary string"

Смотрите также

  • функцию C.GoString,
    которая преобразует C-строку обратно в строку Go
  • функцию C.GoStringN,
    которая преобразует C-строку заданной длины в строку Go
  • функцию C.CBytes,
    которая преобразует срез Go в C-массив байтов
  • функцию C.free,
    которая освобождает память, выделенную через C.CString или C.malloc
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить