Я хочу получить указатель данных строковой переменной (например, string::c_str() в С++) для передачи функции c, и я обнаружил, что это не работает:
package main
/*
#include <stdio.h>
void Println(const char* str) {printf("%s\n", str);}
*/
import "C"
import (
"unsafe"
)
func main() {
s := "hello"
C.Println((*C.char)(unsafe.Pointer(&(s[0]))))
}
Информация об ошибке компиляции: «невозможно принять адрес s[0]». Это будет нормально, но я сомневаюсь, что это вызовет ненужное использование памяти. Есть ли лучший способ получить указатель данных?
C.Println((*C.char)(unsafe.Pointer(&([]byte(s)[0]))))