当您从字符数组输入密码时,我正在制作一个密码程序,我想检查是否使用了所有的数组空间。如果c ++自动将括号括起来,我该如何评估?
答案 0 :(得分:2)
您应该使用std::getline
来将一行读取为std::string
,而不是读入数组。
当用户输入的密码长于您的10个字符时,会发生什么情况? UB发生了,您不想要那样。
std::string password;
std::getline(std::cin, password);
if (password.size() != 10) {
// Take appropriate action.
}
答案 1 :(得分:-2)
一种方法是用零初始化数组,用用户密码填充它,然后在数组中查找第一个零,这将告诉您用户输入了多少个字符。
char password[10];
std::fill(password, sizeof(password), 0);
std::cin >> password;
size_t realEnteredPasswordLength = strlen(password);
答案 2 :(得分:-2)
要检查读取的字符数,您可以执行以下操作:
char c[10];
std::cin >> c;
std::cout << strlen(c);
在使用istream运算符>>之前,不必将数组初始化为零。一个额外的空字符将自动添加到数组的末尾。请记住,如果密码不包含任何空格字符,它将仅读取整个密码。要阅读整行,您可以改为
char c[10];
std::cin.getline(c, 10);
std::cout << strlen(c);
这将从下一行最多读取10个字符,包括空终止符,并将它们存储在数组c中。这具有防止缓冲区溢出的额外好处。
如果您没有指定密码的最大长度,并且您不需要遵循使用char数组的要求,那么我建议您使用std :: string代替
std::string s;
getline(std::cin, s);
std::cout << s.size();