为了账号安全,请及时绑定邮箱和手机立即绑定

在 cgo 中不显示 printf 结果

在 cgo 中不显示 printf 结果

Go
BIG阳 2021-12-07 14:43:34
当我运行这段代码时,我希望打印出像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


查看完整回答
反对 回复 2021-12-07
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我在 LiteIDE 中运行程序,不显示 c printf 输出。

但是在终端中运行相同的程序,然后显示 c printf 输出。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信