我正在尝试编写一个代码来检查大写字母的密码。 当我使用大写字母输入密码时,程序按预期运行(输出'1'和输入的密码)。 但是,如果我输入不带大写字母的密码,程序将崩溃。程序崩溃
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main() {
char password[100];
int i = 0;
int upper = 0;
printf("Enter a password with an uppercase letter: ");
scanf("%s", password);
for (i = 0; i <= 100; i++) {
if (isupper(password[i])) {
upper = 1;
break;
}
}
printf("%d\n", upper);
printf("%s\n", password);
system("pause");
return (0);
}
的错误:
调试断言失败!
计划: ... 15 \项目\ ConsoleApplication3 \调试\ ConsoleApplication3.exe文件: minkernel \ CRT显示器\ ucrt的\ src \ appcrt \转换\ isctype.cpp行:36
表达:C> = -1 & &ç< = 255
有关您的程序如何可以导致断言失败的信息, 看到断言在Visual C++文档。
(按重试以调试应用程序)ConsoleApplication3.exe有 触发了一个断点。
Debug Assertion Failed!
计划: ... 15 \项目\ ConsoleApplication3 \调试\ ConsoleApplication3.exe文件: minkernel \ CRT显示器\ ucrt的\ src \ appcrt \转换\ isctype.cpp行:42
表达:C> = -1 & &ç< = 255
有关您的程序如何可以导致断言失败的信息, 看到断言在Visual C++文档。
(按重试以调试应用程序)ConsoleApplication3.exe有 触发了一个断点。
程序'[13188] ConsoleApplication3.exe'已退出,代码为0 (0x0)。
您有一个100个字符的数组,但您正在访问字符编号101.您也可能会超出输入的字符串,因为您不检查字符串终止符,从而访问未初始化的内存。很抱歉,您对输入没有任何限制,这意味着用户可能会向阵列中写入超过100个字符。所有这些问题导致*未定义的行为*。 –
你可以停在第一个空方式遇到的字符。但消息很有趣。一个字符怎么能'c> = -1 && c <= 255'失败? –
而未被'scanf'填充的数组部分未初始化,因此检查其值是没有价值的。 –