c - 不在 cgo 中显示 printf 结果

标签 c go cgo

当我运行这段代码时,我希望打印出类似 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)
}

c.h

#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);
}

最佳答案

感谢评论。

我可以用下面的代码得到预期的结果

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)
}

c.h:

#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);
}

我想结构字段必须在不同语言之间使用相同的类型。 在问题代码中,结构字段类型不相同。 (C struct: 32bit int, Go struct: 64bit int)

在答案代码中,struct 字段在语言之间是相同的。 (均为 struct:64 位 int)

注意我的架构是darwin/amd64

关于c - 不在 cgo 中显示 printf 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890942/

相关文章:

c - 我不知道这个 makefile 有什么问题?

c - 请帮我解决 malloc 问题

Heroku 部署错误 : Cannot detect buildpack

regexp : multiline, 非贪婪匹配直到可选字符串

arrays - 我如何在go中找到数组的大小

C 猜谜游戏上限和下限

c - 有没有办法在 Windows/Linux 中用 c 检查故障内存?

java - Go JNI异常0xc0000005信号在外部代码执行期间到达

go - 访问 C 联合字段时出现问题

使用 libc 而不是 glibc 的 Golang c-archive