Notice
Recent Posts
Recent Comments
공부중
[C/C++]유니코드로 콘솔출력 또는 파일출력이 동작하지 않는 경우.. 본문
반응형
요 며칠전 프로그램을 짜다가 한글 출력이 안되는걸 보고 왜 안되지?? 고민을하고 삽질을 하다가
결국 해결을하고나서 여기에 글을 남겨봅니다.
결론은 locale 설정을 해주어야 하는데
locale 관련 MSDN만 보고 싶다면 아래 링크를 참조하면 될것같다.
docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160
docs.microsoft.com/ko-kr/cpp/standard-library/locale-class?view=msvc-160
일단 테스트용 코드는 아래와 같다.
#include <iostream>
#include <tchar.h>
#if defined(UNICODE) || defined(_UNICODE)
#define _tcout std::wcout
#else
#define _tcout std::cout
#endif
int main()
{
_tcout << _T("프로그램 시작!") << std::endl;
const TCHAR* Foo = _T("안녕하세요, %d, %s, %f\n");
const TCHAR* Foo1 = _T("%d, %s, %f\n");
FILE* fp = nullptr;
errno_t err = _tfopen_s(&fp, _T("test.txt"), _T("wt"));
if (0 == err)
{
int result = _ftprintf_s(fp, Foo, 10, _T("Hello"), 3.14f);
int result1 = _ftprintf_s(fp, Foo1, 10, _T("Hello"), 3.14f);
if (EOF == result)
{
_tcout << _T("파일 쓰기 실패1") << std::endl;
}
if (EOF == result1)
{
_tcout << _T("파일 쓰기 실패2") << std::endl;
}
fclose(fp);
}
else
{
_tcout << _T("파일 열기 실패") << std::endl;
}
return 0;
}
프로그램 실행결과는 아래와 같다.
문제 상황은 위와같이 한글은 전혀 출력이 되지않는 문제를 보이고 있고
위의 스크린 샷처럼 혹시나 몰라서 걸어놓은 예외 if문이 안걸린것도 아니었다.
걸렸지만 한글이기 때문에 출력이 안되고 있었던것....
문제를 해결하는 코드는 아래와 같았다.
#include <iostream>
#include <tchar.h>
#include <locale>
#if defined(UNICODE) || defined(_UNICODE)
#define _tcout std::wcout
#else
#define _tcout std::cout
#endif
int main()
{
//setlocale(LC_ALL, "korean"); // C 방식
std::locale::global(std::locale("Korean"));
_tcout << _T("프로그램 시작!") << std::endl;
const TCHAR* Foo = _T("안녕하세요, %d, %s, %f\n");
const TCHAR* Foo1 = _T("%d, %s, %f\n");
FILE* fp = nullptr;
errno_t err = _tfopen_s(&fp, _T("test.txt"), _T("wt"));
if (0 == err)
{
int result = _ftprintf_s(fp, Foo, 10, _T("Hello"), 3.14f);
int result1 = _ftprintf_s(fp, Foo1, 10, _T("Hello"), 3.14f);
if (EOF == result)
{
_tcout << _T("파일 쓰기 실패1") << std::endl;
}
if (EOF == result1)
{
_tcout << _T("파일 쓰기 실패2") << std::endl;
}
fclose(fp);
}
else
{
_tcout << _T("파일 열기 실패") << std::endl;
}
return 0;
}
실행 결과는 아래와 같다.
출력함수들이 이런 문제가 발생했을때 EOF말고 다른 리턴을 해줬으면 더 금방 찾지않았을까? 하는 생각이 들어버렸다.
반응형
'Programing > C, C++' 카테고리의 다른 글
[C/C++] 배열 안에 자료형 크기가 다른 값으로 채우기 (0) | 2022.04.18 |
---|---|
[MSVC]public 생성자를 만들었음에도 불구하고 링크에러가 나는 경우 (0) | 2021.05.24 |
[MSVC]디버깅중 외부코드 표시 (0) | 2021.04.21 |
[C/C++] 구조체의 크기 (0) | 2021.03.15 |
[C/C++] 자료형의 크기에 대하여.. (0) | 2021.02.24 |