C: hello.h
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *abc();
int strnum(char *str);
C: hello.c
char *abc()
{
char a[]="teststring"
int byte_len=(int)sizeof(a);
char *b=(char*)malloc(byte_len*sizeof(char));
sprintf(b,"%s",a)
return b;
}
int strnum(char *str){
int len=strlen(str);
return len;
}
GO: main.go
package main
// #include <stdlib.h>
// #include "./hello.h"
import "C"
import (
"fmt"
"unsafe"
)
func main(){
cs:=C.abc() //C返回字符串的b指针
ss:=C.GoString(cs) //将指针转化为string
defer C.free(unsafe.Pointer(cs)) //释放在C中申请的内存空间
fmt.println(ss) //ss为获取到C返回的字符串
cs2 := C.CString("sdfs") // C.CString() to *C.char
defer C.free(unsafe.Pointer(cs2)) //释放在C中申请的内存空间
fmt.Println("num=", C.strnum(cs2)) //必须通过C.CString("sdfs")转换才能传递
}