2016-08-27 2 views
0

Я изучаю программирование в C. Не могли бы вы объяснить, почему здесь ничего не печатается? Заранее спасибо.Почему «printf» не работает?

#include <stdio.h> 

int main (void) 
{ 
    char a[]="abcde"; 
    printf ("%s", a); 
} 
+0

Добавить "\ п" к строке или формата. - >> 'printf ("% s \ n ", a);' – wildplasser

+0

почему он не печатает? –

+0

Или 'fflush (stdout);' after 'printf' –

ответ

7

Во многих системах printf в буфер, то есть при вызове printf выход помещается в буфер, вместо того, чтобы быть напечатан немедленно. Буфер будет сброшен (иначе он будет напечатан) при печати новой строки \n.

Во всех системах ваша программа будет печататься, несмотря на отсутствие \n, поскольку буфер сбрасывается, когда заканчивается ваша программа.

Обычно вы бы еще добавить \n как:

printf ("%s\n", a); 

Альтернативный способ получить выход сразу является вызов fflush для очистки буфера. От человека страницы:

Для выходных потоков, fflush() заставляет запись всех пользовательского пространства буферизованных данных для заданного выхода или потока обновлений через , лежащей в основе функции записи ручья.

Источник: http://man7.org/linux/man-pages/man3/fflush.3.html

EDIT

Как отметил @Barmar и цитируемый @Alter Манна требуется, чтобы буфер очищается, когда программа закончится.

Цитата @Alter Манна:

Если основная функция возвращается к своему первоначальному абоненту, или если функция выхода называется, все открытые файлы закрываются (следовательно, все выходные потоки очищаются) до окончания программы ,

См calling main() in main() in c

+1

C системы ** необходимы ** для выключения вывода при завершении программы. – Barmar

+0

@Barmar, хорошая точка: _ Если основная функция возвращается к исходному вызывающему абоненту или если вызывается функция выхода, все открытые файлы закрываются (следовательно, все выходные потоки очищаются) до завершения программы. Но в этом случае нет вызов 'exit()' или 'return', может ли это быть причиной проблемы? –

+0

@AlterMann Завершение функции приводит к возврату ее вызывающему абоненту. – Barmar

Смежные вопросы