Печать экрана сбивает с толку?

Мой код:

#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]$

Кажется, что system("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 ответа

Решение

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

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

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

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

Увидеть:

Другие вопросы по тегам