Когда printf не может печатать? - PullRequest
14 голосов
/ 16 февраля 2012

Функция printf в c не всегда печатает вывод на экран.Например, если вы забыли поставить \ n в конце строки, которую вы печатаете, вы иногда не получаете o / p.Существуют ли другие условия, когда printf не печатает.Я помню, как кто-то говорил, что существует 7 таких условий.Ребята, пожалуйста, помогите.

Ответы [ 5 ]

20 голосов
/ 16 февраля 2012

Стандартный выход - это буферизованный поток, он не гарантированно сбрасывается, пока не введена новая строка, поток не закрыт или программа не завершается нормально.Если программа выйдет ненормально, поток может не очиститься.Стандартный выход - это буферизованная строка, поэтому новая строка будет очищать его.Есть буферы, которые не сбрасываются с новой строки.

8 голосов
/ 16 февраля 2012

это не значит, что printf не всегда печатается, это значит, что печать не гарантируется немедленно.Это означает, что если вы используете его для целей отладки, то вы не можете гарантировать, что это произойдет именно тогда, когда это происходит в коде.Если вы хотите убедиться, что он печатает именно тогда, когда вы сказали, что звоните fflush(stdout).

Примечание: Как правило, вы не хотите использовать fflush(stdout), если вы не отлаживаете,он действительно ресурсоемкий, и, если вам нужна скорость, он может замедлить вас.

1 голос
/ 25 мая 2016

Есть еще один особый случай, с которым я только что столкнулся:

Мои переменные:

line="-24 hours"
line2="24 hours"

и попробуйте

printf $line 
printf $line2

Ни один не будет работать. Второй сбрасывает слово «часы», а первый ошибочно принимает значение -24 как флаг.

Следовательно, всякий раз, когда я использую printf, я удаляю все опасные символы, если это возможно, используя

sed -r "s/[/\ #;&~]/_/g"

Я хочу, чтобы коды printf могли быть улучшены разработчиком.

Береги себя

0 голосов
/ 20 мая 2018

Я использовал

puts(largeString); 

потому что в моем конкретном случае printf () просто перестал печатать на полпути. Там была вся строка, она просто не печаталась.

fflush (stdout) тоже не исправил это, другой printf () на следующей строке печатался просто отлично.

0 голосов
/ 16 февраля 2012

Как user1214634 указанный стандартный вывод буферизован и печатается на экране только при определенных условиях.Если вы хотите заставить его печатать, вы можете вызвать fflush (stdout)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...