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")转换才能传递
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)