英文:
Passing array of string as parameter from go to C function
问题
我有一个C函数:
int cgroup_change_cgroup_path(const char * path, pid_t pid, const char *const controllers[])
我想通过使用cgo在Go语言中调用它。
如何传递第三个参数,因为它接受一个C字符串数组。
英文:
I have one C function:
int cgroup_change_cgroup_path(const char * path, pid_t pid, const char *const controllers[])
I want to call it in go language by using cgo.
How to pass the third parameter as it accepts a C array of string.
答案1
得分: 3
你可以使用 C 辅助函数构建数组,然后使用它们。
以下是解决同样问题的一个解决方案:
// C 辅助函数:
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);
}
// 从 sargs []string 在 Go 中构建 C 数组
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 上发布的帖子
英文:
You can build the arrays using c helper functions and then use them.
Here is a solution to the same problem:
// 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))
}
golangnuts post by John Barham
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论