프로그래밍/C
MSYS2 에서 C 언어의 printf(...) 가 제대로 출력하지 못할 때...
Scripter
2022. 1. 8. 11:12
아래의 단순한 코드로 작성되어 gcc 로 컴파일된 실행파일의 콘솔 출력이 비정상인 경우....
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 5; i++)
{
printf("abcd %d\r\n",i);
Sleep(1000);
}
return 0;
}
첫째 해결 방법:
아래의 수정된 코드 처럼 모든 printf.(...); 구문 뒤에 fflush(strout); 를 추가한다.
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 5; i++)
{
printf("abcd %d\r\n",i);
fflush(stdout); // 모든 printf(...); 구문 뒤에 이를 추가한다.
Sleep(1000);
}
return 0;
}
둘째 해결 방법:
아래의 수정된 코드 처럼 모든 main() 함수에서
printf(...); 구문이 시작되기 전에 setvbuf(...); 구문을 한 번만 추가한다.
#include <stdio.h>
int main(void)
{
int i;
setvbuf(stdout, (char *)NULL, _IOLBF,0 );
for (i = 0; i < 5; i++)
{
printf("abcd %d\r\n",i);
Sleep(1000);
}
return 0;
}
※ 윈도우의 MSYS2 에서 flex & bison 으로 작성된 어플의 printf() 출력이 제대로 안 될 때는
위의 두 가지 방법 모두 안 되니, 다른 방법으로 해결해여 한다.