将字符串数组作为参数从转到C函数

时间:2017-09-01 10:03:15

标签: go cgo

我有一个C函数:

int cgroup_change_cgroup_path(const char * path, pid_t pid, const char *const  controllers[])

我想用cgo用go语言来调用它。 如何传递第三个参数,因为它接受一个C数组的字符串。

1 个答案:

答案 0 :(得分:3)

您可以使用c辅助函数构建数组,然后使用它们。

以下是同一问题的解决方案:

// C helper functions:

static char**makeCharArray(int size) {
        return calloc(sizeof(char*), size);
}

static void setArrayString(char **a, char *s, int n) {
        a[n] = s;
}

static void freeCharArray(char **a, int size) {
        int i;
        for (i = 0; i < size; i++)
                free(a[i]);
        free(a);
}

// Build C array in Go from sargs []string

cargs := C.makeCharArray(C.int(len(sargs)))
defer C.freeCharArray(cargs, C.int(len(sargs)))
for i, s := range sargs {
        C.setArrayString(cargs, C.CString(s), C.int(i))
}
John Barham发表的

golangnuts