我的疑问是,如果我输入填充数组的密码,程序就可以正常工作。但是,如果我输入诸如“apple25”之类的密码,我认为它将数组中的空格计为字符,甚至将“apple25”声明为有效密码。
我该如何防止这种情况发生?是否也将字符串终止符算作char
?因为即使是“AAPPLLEE2”也是有效密码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
int main()
{
char arr[10];
printf("Enter a password. \n");
scanf("%s",arr );
// printf(arr);
char ch;
int i;
int alp=0, dig=0, c=0;
for (i=0; i<10; i++)
{
ch=arr[i];
if(isalpha(ch))
{
alp++;
// printf(" alpha is %d \n",alp);
}
else if(isdigit(ch))
{
dig++;
// printf("digit is %d \n",dig);
}
else
{
c++;
// printf("charectores are %d \n",c);
}
}
if(alp>=1&&dig>=1&&c>=1)
{
printf("Valid Password");
}
else{
printf("Invalid Password");
}
return 0;
}
-
第 1 点:始终初始化自动局部变量。避免您意外访问未初始化的值。
char arr[10] = {0};
-
第 2 点:始终限制您的输入长度。避免您遇到未定义的行为通过比预期长的输入超出分配的内存。
scanf("%9s",arr );
第3点. 使用strlen()仅循环valid输入的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)