为什么我在printf中没有'\n'的情况下无法使用gcc编译器?

pds*_*ssn 3 c gcc

我写了printf()如下声明:

printf("hello\n");
Run Code Online (Sandbox Code Playgroud)

使用Linux的gcc编译器构建时,这很好用.但是,如果我写

printf("hello");
Run Code Online (Sandbox Code Playgroud)

打印件不会出现在屏幕上.似乎有一些缓冲机制?有人可以给我更多相关信息吗?

gbj*_*anb 14

尝试fflush()调用.通常写入屏幕或文件非常昂贵,因此数据会被缓冲,直到需要写入.一个\n通常足以完成这个技巧(缓冲区通常一次只存储一行),但是如果你需要刷新缓冲区 - 请使用该刷新调用.

  • 记住,小子,stdout默认是缓冲的,stderr不是. (2认同)
  • BTW,fflush(NULL)将刷新*all*open buffers. (2认同)

And*_*ler 7

即使缓冲不是问题,如果你不打印换行符,你的shell的提示可能会破坏输出.

我不确定你在哪个环境中运行它,但是如果你是在unix shell中使用gcc并且在程序结束时执行printf("hello")它将不会在shell提示符之前打印换行符被展示.提示将打印在同一行,有时会覆盖整行,具体取决于您设置的提示类型.