gpt4 book ai didi

c - 如何让cgo返回数组给c?

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:00 26 4
gpt4 key购买 nike

我正在用c调用golang,我想返回一个字符串数组和一个int数组,我这样做:

package main

import "C"
//export Seg
func Seg(input *C.char, segs *[]*C.char, tags *[]int) (errChars *C.char) {
count := 10
segs_ := make([]*C.char, 10, 10)
for i:=0; i<count; i++ {
segs_[i] = C.CString("aaaaaa")
}
segs = &segs_
tags_ := make([]int, count)
for i:=0; i<count; i++ {
tags_[i] = i
}
tags = &tags_
return
}
func main() {}

构建方式

go build -o libacrf.so -buildmode=c-shared clib.go

这样调用它:

#include <stdio.h>
#include <stdlib.h>

#include "libacrf.h"

int main(int argc, char *argv[])
{
GoSlice *segs, *tags;
char* err;
err = Seg("hahahhaha", segs, tags);
if (err != NULL) {
fprintf(stderr, "error: %s\n", err);
free(err);
return 1;
}
printf("%llu\n", (*tags).len); // it should be 10, but it is not right now

return 0;
}

但问题是我无法从golang中得到真正的结果。

最佳答案

这与 C 没有任何关系,您正在覆盖 tagssegs 指针值的副本,而不是分配新的 slice 值; .首先在 Go 中做一个例子,看看你在做什么。 https://play.golang.org/p/EQWRiqVwqm

为了将_tags值赋给指针,语法应该是

*tags = _tags

关于c - 如何让cgo返回数组给c?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com