我正在从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你是对的。 –