CGO를 사용하여 Go 문자열을 C `char*` 포인터에 안전하게 복사하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-27 05:35:14
원래의
723명이 탐색했습니다.

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

CGO를 사용하여 Go 문자열을 C char * 포인터에 복사

Go에서는 CGO를 통해 C 프로그래밍 언어의 기능을 활용하는 능력이 중요합니다. . 일반적인 작업 중 하나는 Go 문자열을 C char * 포인터로 복사하는 것입니다. 그러나 초기 질문

func copy_string(cstr *C.char) {
    str := "foo"
    C.GoString(cstr) = str
}
로그인 후 복사

에서 언급한 접근 방식은 올바르지 않습니다. Go 문자열을 C char 포인터에 복사하는 올바른 방법에는 C.CString 함수가 포함됩니다. 이 함수는 Go 문자열을 char 포인터에 할당할 수 있는 C 스타일 null 종료 문자열로 변환합니다.

cstr := C.CString(str)
로그인 후 복사

C.CString이 C에 메모리를 할당한다는 점에 유의하는 것이 중요합니다. -style 문자열이지만 자동으로 해제되지는 않습니다. 메모리 누수를 방지하려면 C.free 함수를 사용하여 할당된 메모리를 수동으로 해제하는 것이 중요합니다.

C.free(unsafe.Pointer(cstr))
로그인 후 복사

이러한 함수를 사용하면 Go 문자열을 C char * 포인터에 성공적으로 복사할 수 있으므로 Go와 C. 효율적이고 안전한 코드 실행을 보장하려면 메모리 관리를 적절하게 처리하는 것을 잊지 마세요.

위 내용은 CGO를 사용하여 Go 문자열을 C `char*` 포인터에 안전하게 복사하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿