在系统调用中使用`\ r`字符写(2)

ser*_*gio 0 c

我正在尝试在终端中打印数字.数字必须打印在同一位置.所以1应该打印然后1将被删除,2并将打印等.我正在使用以下C代码:

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

int main(int argc, char **argv)
{
    useconds_t milisecs;
    milisecs = 500000;
    int i;
    char buffer[1024];

    /* print numbers in-place */
    for (i=0;i<10;i++) {
        printf("%d\r",i);
        fflush(stdout);
        usleep(milisecs);
    }

    /* print numbers in-place using write() */
    for (i=0;i<10;i++) {
        snprintf(buffer, sizeof(buffer), "%d\r", i);
        write(1,buffer,1);
        usleep(milisecs);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一个for循环使用printf()并按预期工作.然而第二个循环与write()打印0123456789.如何让第二个循环输出与第一个循环相同的文本?我认为问题与\r不被承认有关write().

And*_*nle 5

write(1,buffer,1);

只写一个字符stdout.字符串中的第一个数字.

你要

write(1,buffer,strlen(buffer));