>백엔드 개발 >Golang >CGO를 사용하여 Go 문자열을 C char* 포인터에 안전하게 복사하는 방법은 무엇입니까?

CGO를 사용하여 Go 문자열을 C char* 포인터에 안전하게 복사하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 12:17:15520검색

How to Safely Copy Go Strings to C char* Pointers using CGO?

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

Go 영역에서는 원활하게 교환해야 하는 상황에 직면할 수 있습니다. Go 코드와 C 라이브러리 또는 애플리케이션 간의 데이터. 그러한 시나리오 중 하나는 CGO의 강력한 기능을 사용하여 Go 문자열을 C 문자 포인터(char *)로 전송하는 것입니다.

도전 과제:

Go를 복사하고 싶은 욕구가 생깁니다. CGO의 마법 기능을 통해 * 문자열을 문자로 변환합니다. 질문은 계속됩니다. 다음 접근 방식을 사용하여 이를 달성할 수 있습니까?

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

해결책:

의도는 훌륭하지만 코드 조각에 제시된 접근 방식은 실패합니다. 짧은. 공식 CGO 문서에 따르면 Go 문자열을 C 문자열로 변환하는 올바른 방법은 C.CString 함수를 활용하는 것입니다.

cstr = C.CString(str)

C.CString은 Go 문자열에 메모리를 의무적으로 할당한다는 점을 명심하는 것이 중요합니다. 너. 그러나 이 메모리는 자동으로 해제되지 않으며 사용자의 노력에 달려 있습니다. 이 상황을 해결하려면 C.free를 명시적으로 호출하여 할당된 메모리를 수동으로 해제해야 합니다.

C.free(unsafe.Pointer(cstr))

이 접근 방식을 채택하면 할당된 메모리를 적절하게 폐기하고 메모리 누수를 방지할 수 있습니다. 그렇지 않으면 코드를 괴롭힐 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.