我正在嘗試編寫一個代碼來檢查大寫字母的密碼。 當我使用大寫字母輸入密碼時,程序按預期運行(輸出'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'填充的數組部分未初始化,因此檢查其值是沒有價值的。 –