gpt4 book ai didi

C90 printf with\n or\r\n 在 cygwin 中不工作;但是 fflush(标准输出);工作正常。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:35 25 4
gpt4 key购买 nike

Cygwin64 位

编译命令:

gcc hello.c -o hello -ansi -pedantic-errors

运行命令

./hello

你好.c

#include<stdio.h>
int main() {
/*setbuf(stdout, 0); I KNOW THIS WILL WORK IF ADDED, it is a solution, but I want to know why line break itself is not working*/
printf("hello world!\n");
printf("hello world again!\r\n");
/*fflush(stdout); without fflush, the above strings are not showing*/

while(1)
{
}
}

问题:

  1. 我不想在每次 printf 后都进行 fflush 让终端及时显示字符串,那怎么办?

    答案:setbuf(stdout, 0);

  2. 为什么“\n”或“\r\n”在我的案例中不起作用,因为很多帖子都指出换行符可以解决问题?

  3. cygwin 终端的行为是否与普通 Linux 终端不同?由于我没有安装linux,谁能帮我测试一下?

  4. 或者让我问一个更一般的问题:在哪种终端上,“换行将强制刷新”这句话是正确的?

谢谢

最佳答案

似乎在 Cygwin 中,stdout 未被识别为终端(而是管道),因此默认情况下它不是行缓冲的。

基于 this answer ,也许与 Cygwin DLL 链接会有所帮助。

关于C90 printf with\n or\r\n 在 cygwin 中不工作;但是 fflush(标准输出);工作正常。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com