github.com/searKing/golang/go@v1.2.74/unsafe/test/example_translator.go (about) 1 // Copyright 2020 The searKing Author. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package test 6 7 /* 8 #include <stdio.h> 9 #include <string.h> 10 #include <stdlib.h> 11 12 char** getStringArray(int num){ 13 char** list = malloc(num*sizeof(char*)); 14 for(int i = 0; i<num; i++){ 15 list[i] = "searKing"; 16 } 17 return list; 18 } 19 20 void showStringArray(char** list, int num){ 21 printf("num = %d\n",num); 22 int i = 0; 23 for(i=0;i<num;i++){ 24 printf("%s\n",list[i]); 25 } 26 } 27 */ 28 import "C" 29 import ( 30 "fmt" 31 "unsafe" 32 33 unsafe2 "github.com/searKing/golang/go/unsafe" 34 ) 35 36 func ExampleGoStringArray() { 37 //char** 转化成 []string 38 cCharArray := C.getStringArray(3) 39 defer C.free(unsafe.Pointer(cCharArray)) 40 fmt.Print(unsafe2.GoStringArray(unsafe.Pointer(cCharArray), 3)) 41 42 } 43 func ExampleCStringArray() { 44 //[]string 转化成 char** 45 box := []string{"xing", "jack", "john", "searKing"} 46 cCharArray, n := unsafe2.CStringArray(box...) 47 defer C.free(unsafe.Pointer(cCharArray)) 48 C.showStringArray((**C.char)(unsafe.Pointer(cCharArray)), C.int(n)) 49 }