猿问

在 cgo 中不显示 printf 结果

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

}


BIG阳
浏览 165回答 2
2回答

慕的地10843

我可以用下面的代码得到预期的结果main.go:package main/*#include "c.h"*/import "C"import (&nbsp; &nbsp; "unsafe")type S struct {&nbsp; &nbsp; A int64 // 64bit int&nbsp; &nbsp; B int64 // 64bit int&nbsp;}func main() {&nbsp; &nbsp; s := &S{A: 4, B: 89}&nbsp; &nbsp; pass_to_c := (*C.S)(unsafe.Pointer(s))&nbsp; &nbsp; C.gostruct(pass_to_c)}ch:#include <stdio.h>#include <stdlib.h>typedef struct {&nbsp; &nbsp; long long int A; // 64bit int&nbsp; &nbsp; long long int B; // 64bit int} S;extern void gostruct(S *struct_s) {&nbsp; &nbsp; printf("{A: %lld, B: %lld}\n", struct_s->A, struct_s->B);}我想 struct 字段必须在语言之间使用相同的类型。在问题代码中,结构字段类型不相同。(C 结构体:32 位整数,Go 结构体:64 位整数)在答案代码中,结构字段在语言之间是相同的。(两个结构体:64bit int)请注意,我的架构是 darwin/amd64

慕桂英3389331

我在 LiteIDE 中运行程序,不显示 c printf 输出。但是在终端中运行相同的程序,然后显示 c printf 输出。
随时随地看视频慕课网APP

相关分类

Go
我要回答