我正在尝试编写代码来检查大写字母的密码。 当我用大写字母键入密码时,程序按预期运行(打印输出'1'和输入的密码)。 但是,如果我输入的密码没有大写字母,程序就会崩溃。
我的代码:
columns: [
{ text: 'Ano', datafield: 'Ano', width: '4%', filter: fdata, cellsalign: 'center', columntype: 'number' },
]
错误:
Debug Assertion失败!
程序: ... 15 \ Projects \ ConsoleApplication3 \ Debug \ ConsoleApplication3.exe文件: minkernel \ crts \ ucrt \ src \ appcrt \ convert \ isctype.cpp行:36
表达式:c> = -1&& c< = 255
有关程序如何导致断言失败的信息, 请参阅关于断言的Visual C ++文档。
(按重试调试应用程序)ConsoleApplication3.exe具有 触发了一个断点。
Debug Assertion失败!
程序: ... 15 \ Projects \ ConsoleApplication3 \ Debug \ ConsoleApplication3.exe文件: minkernel \ crts \ ucrt \ src \ appcrt \ convert \ isctype.cpp行:42
表达式:c> = -1&& c< = 255
有关程序如何导致断言失败的信息, 请参阅关于断言的Visual C ++文档。
(按重试调试应用程序)ConsoleApplication3.exe具有 触发了一个断点。
程序'[13188] ConsoleApplication3.exe'已退出,代码为0 (为0x0)。
答案 0 :(得分:1)
改变这个:
for (i = 0; i <= 100; i++) {
到
for (i = 0; i < 100 && password[i] != '\0'; i++) {
^^^ ^^^^^^^^^^^^^^^^^^
note: no = check for end of string
你有
char password[100];
所以合法索引只有0到99.此外,您需要检查是否已到达字符串结尾(又名密码[I]!='\ 0')
更好地实现您想要实现的目标(受@ Jean-Francois Fabre启发):
scanf("%99s", password);
^^
To prevent buffer overflow
for (i = 0; i < strlen(password); i++) {
....
答案 1 :(得分:0)
改变:
FrameID
到:
for (i = 0; i <= 100; i++)
注意:如果没有大写字母,你就会超出界限。