我能够得到程序 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))
}
它运行没有错误,但它不打印任何东西。上面的代码片段主要基于“字符串和事物”代码 here .
最佳答案
试试这个:
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.puts(cs)
}
解释:
fputs
方法将一个字符串写入数据流,在您的例子中是 stdout,它指向一个指向不存在的文件的指针,因为它之前既没有打开也没有在任何地方定义.因此,即使程序看起来执行无误,您也看不到任何标准输出,因为它被重定向到一个不存在的文件。
此外,应该注意的是,只需从 Strings and things 中删除代码在没有一些自定义的情况下进入主程序的部分将不起作用,因为它在博客中作为一个包提供,这就是为什么存在文件存在混淆的原因。博客文章中的 print
包似乎只是假设您尝试将数据流写入的文件已经在之前的某个地方定义过。这有点令人困惑,他们可能应该对此进行调整。
我用 puts
替换了 fputs
并删除了指向文件的指针,程序执行得很好。
希望即使进行了修改,这也有助于实现您正在寻找的目标!
关于macos - 无法打印到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51394968/