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  }