2016-08-27 1 views
0

C에서 프로그래밍을 배우고 있습니다. 왜 아무 것도 여기에 인쇄되지 않는 이유를 설명해 주시겠습니까? 미리 감사드립니다. 만약 출력이 대신에 즉시 인쇄되는 버퍼에 배치 printf를 호출 할 때 여러 시스템에서 printf"printf"가 작동하지 않는 이유는 무엇입니까?

#include <stdio.h> 

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

문자열 또는 형식으로 "\ n을"을 추가를 참조하십시오. - >>'printf ("% s \ n", a); ' – wildplasser

+0

왜 출력되지 않습니까? –

+0

아니면'fflush (stdout);'printf' 다음에 –

답변

7

, 즉 완충된다. 새 줄 \n을 인쇄 할 때 버퍼가 플러시됩니다 (출력이 인쇄 됨).

모든 시스템에서 프로그램이 끝날 때 버퍼가 비워 지므로 \n이 누락 되었음에도 불구하고 프로그램이 인쇄됩니다. 출력이 즉시 버퍼를 플러시 fflush를 호출하는 것입니다 얻을

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

다른 방법 :

일반적으로 여전히 \n 등을 추가합니다. 남자 페이지에서 : 출력 스트림에 대한

는 FFLUSH() 스트림의 기본 write 함수를 통해 주어진 출력이나 업데이트 스트림에 대한 모든 사용자 공간 버퍼링 된 데이터의 쓰기를 강제로.

출처 : http://man7.org/linux/man-pages/man3/fflush.3.html

편집으로

@Barmar에 의해 지적은 프로그램이 종료 될 때 버퍼 플러시 필요가있다 @Alter 맨 인용. @Alter 맨에서

인용구 :

프로그램 종료 전에 주요 기능은 원래의 호출자에게 반환하거나 종료 함수가 호출되는 경우, 열려있는 모든 파일 (따라서 모든 출력 스트림을 플러시) 폐쇄하는 경우 .

calling main() in main() in c

+1

C 시스템은 프로그램이 끝나면 출력을 플러시하기 위해 ** 필요합니다 **. – Barmar

+0

@Barmar, 좋은 점 : _ 주 함수가 원래 호출자에게 반환되거나 exit 함수가 호출되면 프로그램 종료 전에 열려있는 모든 파일이 닫힙니다 (따라서 모든 출력 스트림이 플러시됩니다). 그러나이 경우에는 'exit()'또는'return'을 호출하면 문제의 원인이 될 수 있습니까? –

+0

@AlterMann 함수 끝에서 실행되면 호출자에게 반환됩니다. – Barmar

관련 문제