Печать экрана сбивает с толку?
Мой код:
#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 по умолчанию является линейным буфером.
Увидеть:
- setbuf (), setvbuf ()
- stdbuf