我想从C函数中获取一个int和string.int - 错误代码,字符串 - 数据.
试过这样的方式:
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))
}
Run Code Online (Sandbox Code Playgroud)
它几乎奏效了.
输出为: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))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |