2016-03-23 29 views
0

Cgo kullanarak bir pam modülü geliştirdim. bir ** kömürün dize [] olarak dönüştürülemezcgo ** char, dilim dize

func pam_sm_authenticate(pamh *C.pam_handle_t, flags C.int, argc C.int, argv **C.char) int { fmt.Println(C.GoString(*argv[0])) return 0 }

hata biliyorsanız bana bildirin

invalid operation: argv[0] (type **C.char does not support indexing)

olduğunu.

cevap

0

Cgo wiki'yle birlikte bir araya getirildi: https://github.com/golang/go/wiki/cgo#Turning_C_arrays_into_Go_slices.

import "C" 
import "unsafe" 

func GoStrings(argc C.int, argv **C.char) []string { 

    length := int(argc) 
    tmpslice := (*[1 << 30]*C.char)(unsafe.Pointer(argv))[:length:length] 
    gostrings := make([]string, length) 
    for i, s := range tmpslice { 
     gostrings[i] = C.GoString(s) 
    } 
    return gostrings 
}