gpt4 book ai didi

go - 在C函数中更改golang C.String变量的值

转载 作者:IT王子 更新时间:2023-10-29 01:18:25 25 4
gpt4 key购买 nike

我想从 C 函数中获取一个 int 和 string。int - 错误代码,string - 数据。

这样试过:

package main
/*
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int test(char *out){
snprintf(out, sizeof out, "1234567890abcd");
return 0;
}

*/
import "C"

import (
"fmt"
"unsafe"
)

func main() {
foo := C.CString("")
defer C.free(unsafe.Pointer(foo))
C.test(foo)
fmt.Println("Output is: "+C.GoString(foo))
}

它几乎成功了。

Output is: 1234567

但应该是:1234567890abcd

我认为传递给 C 函数的 C.String 的大小是 8。但不知道如何扩展它(固定大小 <> 8)或更改为动态。

所以问题是:我应该如何将该变量传递给 C?

最佳答案

您正在指针上调用函数 sizeof。在您的计算机上,指针的大小为 8 个字节,因此您将返回一个长度为 8 的字符串。

我不知道您应该如何精确管理指针大小的所有细节,因为我不太擅长 C,但这个示例说明了如何解决您的紧迫问题。

package main
/*
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int test(char *out){
snprintf(out, 16, "1234567890abcd");
return 0;
}

*/
import "C"

import (
"fmt"
"unsafe"
)

func main() {
foo := C.CString("")
defer C.free(unsafe.Pointer(foo))
C.test(foo)
fmt.Println("Output is: "+C.GoString(foo))
}

关于go - 在C函数中更改golang C.String变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309982/

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