2
나는 O'reilly라는 리눅스 시스템 프로그래밍을 배우고 있었다. "일반적인 실수는 버퍼가 자동 변수로 선언되기 전에 스트림이 닫히기 전에 끝나는 것으로, 특히 main()에 로컬 버퍼를 제공하지 않도록주의하고 스트림을 명시 적으로 닫지 않아야합니다. " ,왜 main()에 로컬 인 버퍼가 있고 버그를 명시 적으로 닫는 데 실패하지 않습니까?
#include <stdio.h>
int main()
{
char buf[BUFSIZ];
/*set stdin to block-buffered with a BUFSIZ buffer*/
setvbuf(stdout,buf,_IOFBF,BUFSIZ);
printf("Arr!\n");
return 0;
}
내가 컴파일하고 코드 ...를 실행하고 정말 이런 종류의 코드가 원인이됩니다 이해하지 않는이 ... 나에게이 개념을 이해하는 데 도움하십시오
은이 버그가 코드의 예를 보여줍니다 다들 감사 해요.
예. 즉, * stdout *은'at_exit'을 사용하여 등록 된 것처럼'fflush'됩니다.이 함수는'exit()'-ing과'main'의 보이지 않는 호출자 ('crt0의 시작 코드 .o')는'main'을 리턴 한 후'exit'를 호출합니다. –