如何在C ++中检查数组大小以避免空格

时间:2018-11-16 21:07:19

标签: c++ arrays

当您从字符数组输入密码时,我正在制作一个密码程序,我想检查是否使用了所有的数组空间。如果c ++自动将括号括起来,我该如何评估?

3 个答案:

答案 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();