Печать экрана сбивает с толку? - PullRequest
1 голос
/ 31 октября 2011

мой код:

#include <stdio.h>
void main( int argc, char** argv) {
    printf("%s", argv[0]);
    system("pwd");
}

Вывод:

[river@localhost studio]$ ./a.out 
/home/river/Desktop/studio
./a.out[river@localhost studio]$

Кажется, что система ("pwd") печатает сначала, а затем печатает argv [0].Зачем?Если я добавлю следующее утверждение:

#include <stdio.h>

    void main( int argc, char** argv) {
        printf("%s", argv[0]);
        fflush(stdout);
        system("pwd");
    }

Вывод:

[river@localhost studio]$ ./a.out 
./a.out/home/river/Desktop/studio

Работает нормально, почему?

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Вызов printf только помещает вывод в буфер. Для того, чтобы буфер действительно был записан, он должен быть сброшен . Вывод автоматически сбрасывается при печати новой строки, поэтому, если вы замените строку формата в printf следующим: "%s\n", она должна работать без вызова fflush.

1 голос
/ 31 октября 2011

Другой способ исправить это:

printf("%s\n", argv[0]);

Дело в том, что stdout по умолчанию является линейным буфером.

См:

...