거의 모든 Linux 운영 체제 에서처럼 사용자 유형이 숨겨진 상태로 유지되도록 Windows/Linux 콘솔에서 입력을받습니다. 다음 스 니펫에 의해 던져진 예외를 어떻게 정상적으로 처리해야합니까?예외 처리 C++
#ifdef _WIN32
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdin, &mode);
SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));
std::string sTempPass;
getline(cin, sTempPass);
SetConsoleMode(hStdin, mode);
#elif __linux__
termios oldt;
tcgetattr(STDIN_FILENO, &oldt);
termios newt = oldt;
newt.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
std::string sTempPass;
getline(cin, sTempPass);
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
그리고 가능한 시나리오가 무엇 위의 조각은 예외의 다른 유형을 던질 수 있으며,이 작업을 수행하는 다른 플랫폼에 독립적 인 방법은 무엇입니까?
게시 한 코드는 예외를 발생시키지 않습니다. –
@ el.pescado :'getline (cin, sTempPass);'호출이 있습니다. 적어도 이것은 출력 문자열 버퍼의 크기를 조정하기 때문에'std :: bad_alloc' 예외를 발생시킬 수 있습니다. 코드 * 예외를 throw 할 수 있습니다. – IInspectable
@IInspectable 네 말이 맞아. –