我的代码看起来是1:1:您可以忽略ft_strlen函数

#include <unistd.h>
#include <stdio.h>

int ft_strlen(char *c)
{
    int i = 0;
    while(c[i] != '\0')
    {
        i++;
    }

    return i;
}

int main() 
{
    char rockPaperScissores[] = "THIS IS rockPaperScissores^tm: ";
    int rps = ft_strlen(rockPaperScissores);
    
    printf("%d\n", rps);

    write(1, rockPaperScissores, rps);
    write(1, "LETS PLAY!!!\n", 13);

    for (int i = 51; i >= 49; i--)
    {
        write(1, &i , 1);
        write(1, "\n" , 1);
    }

    return 0;
}

我的输出如下所示:

THIS IS rockPaperScissores^tm: LETS PLAY!!!
3
2
1
31

我现在的问题是……为什么"31"在我的输出中是最后一个,而它本应该是第一个. 谢谢你的帮助.

推荐答案

The stdio functions use buffered io. Writes to the underlying file descriptor only happen when the buffer becomes full or when the program exits.[1] stdout is also flushed when a LF is encountered if it's connected to a terminal.

在您的情况下,似乎stdout没有连接到终端.由于缓冲区从未填满,因此它在退出时将其输出写入下面的文件描述符.


  1. 此外,可以使用fflush显式刷新缓冲区.此外,还可以禁用句柄的缓冲.这已经为stderr完成了.

C++相关问答推荐

当main函数调用被重构时,C函数给出错误的结果

将整数的.csv文件解析为C语言中的二维数组

核心转储文件中出现奇怪的大小变化

如何调试LD_PRELOAD库中的构造函数?

在一个小型玩具项目中实现终端历史记录功能

当我运行/调试C程序时,Malloc()似乎正在将&q;r\r...&q;赋值给一个指针,我不确定为什么?

当我更改编译优化时,相同的C代码以不同的方式运行

为什么即使在强制转换时,此代码也会溢出?

双指针指向常量双指针的指针类型赋值不兼容

防止C++中递归函数使用堆栈内存

C指针概念分段故障

如何用C语言为CLI应用程序编写按键检测系统?

C将数组传递给函数以修改数组

使用%f格式说明符打印整数值

如何在VSCode中创建和使用我自己的C库?

如何修复我的qsort()算法?它每次都给出不同的结果

Malloc和对齐

RISC-V GCC编译器错误编译ASM代码

即使客户端不发送数据,也会发生UNIX套接字读取

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?