我正在從Windows/Linux控制檯取得輸入,以便用戶類型的密碼在幾乎所有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'異常,因爲調整了輸出字符串緩衝區的大小。代碼*可以拋出異常。 – IInspectable
@Inspectable你是對的。 –