当我运行这段代码时,我希望打印出像A: 4, B: 89. 但实际上,不显示任何内容。为什么这个程序不向标准输出显示结果?main.go:package main/*#include "c.h"*/import "C"import ( "unsafe")type S struct { A int B int}func main() { s := &S{A: 4, B: 89} pass_to_c := (*C.S)(unsafe.Pointer(s)) C.gostruct(pass_to_c)}ch#include <stdio.h>#include <stdlib.h>typedef struct { long int A; long int B;} S;extern void gostruct(S *struct_s) { printf("A: %ld, B: %ld\n", struct_s->A, struct_s->B);}
2 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
我可以用下面的代码得到预期的结果
main.go:
package main
/*
#include "c.h"
*/
import "C"
import (
"unsafe"
)
type S struct {
A int64 // 64bit int
B int64 // 64bit int
}
func main() {
s := &S{A: 4, B: 89}
pass_to_c := (*C.S)(unsafe.Pointer(s))
C.gostruct(pass_to_c)
}
ch:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
long long int A; // 64bit int
long long int B; // 64bit int
} S;
extern void gostruct(S *struct_s) {
printf("{A: %lld, B: %lld}\n", struct_s->A, struct_s->B);
}
我想 struct 字段必须在语言之间使用相同的类型。在问题代码中,结构字段类型不相同。(C 结构体:32 位整数,Go 结构体:64 位整数)
在答案代码中,结构字段在语言之间是相同的。(两个结构体:64bit int)
请注意,我的架构是 darwin/amd64
- 2 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消