sprintf 2

sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시 주의

sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시 소수점 첫째자리까지 표현하게 설정한 경우 자체적으로 소수점 둘째자리에서 반올림처리해서 표시해버린다. double num = 99.99; TCHAR szText[256]; _stprintf(szText, _T("%.01f"), num)인 경우 문자열은 "100.0"이 된다. 프로그래머가 반올림을 의도하지 않고 이하 자리는 버림을 원하는 경우 이러한 표현은 난감할 것이다. 이경우 floor 함수를 사용하거나, 숫자의 범위가 정수로 커버가능한 경우 간단히 형 변환식으로 처리할 수 있다. floor 함수 사용: _stprintf(szText, _T("%.01f"), floor(10. * num) / 10.); 형변환 처리: _stp..

C, C++ 문법 2012.10.24

가변인수 활용하기

가변인수는 ...으로 표시하고 이를 받기 위해서는 따로 매크로 va_ 로 시작되는 매크로들을 사용해야 한다. 이를 이용하면 따로 입맛에 맛는 함수를 만들 수 있다. 가령 에디트 콘트롤에 문자열을 입력하고자 할때 보통 char szText[256]; wsprintfA(szText, "%d, %s\r\n", 정수, 문자열); SetWindowTextA(hEdit, szText); 이렇게 3줄이나 걸리는데,,,, 가변 인수를 직접 사용자 정의 함수에서 조작하면 PrintOnEdit(HWND hWnd, char *lpFmt, ...) 식으로 한 줄로 깔끔하게 처리할 수 있게 된다. 활용도가 좋다. 아래는 로그 에디트에 출력하는 예. int LogText(LPCSTR lpFmt, ...) // stdcall로 선..

C, C++ 문법 2012.03.06