【发布时间】:2018-12-25 22:59:05
【问题描述】:
我可以让程序 here 按预期打印 42。
但我无法将以下程序打印到标准输出:
package main
// #include <stdlib.h>
// #include <stdio.h>
import "C"
import (
"unsafe"
)
func main() {
cs := C.CString("hello")
defer C.free(unsafe.Pointer(cs))
C.fputs(cs, (*C.FILE)(C.stdout))
}
它运行没有错误,但它不打印任何东西。上面的 sn-p 主要是基于“Strings and things”代码here。
【问题讨论】:
-
为什么不检查
C.fputs的返回值呢?它可能很好地暗示了问题。 -
感谢:
./main.go:15: cannot convert nil to type _Ctype_int -
你的意思是你正在做类似
if C.fputs(...) != nil的事情?然后是的,C 的fputs显然不会返回nil,因为 C 对 Go 风格的错误处理一无所知。 C 的fputs返回int。请阅读fputs上的手册页。
标签: macos go macos-high-sierra cgo