Ich versuche, einen Code zu schreiben, um ein Passwort für einen Großbuchstaben zu überprüfen. Wenn ich ein Passwort mit einem Großbuchstaben eintippe, läuft das Programm wie erwartet (druckt '1' und das eingegebene Passwort aus). Wenn ich jedoch ein Passwort ohne einen Großbuchstaben eingeben, stürzt das Programm ab.Programm stürzt ab
Mein Code:
#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);
}
Die Fehler:
Debug Assertion Failed!
Programm: ... 15 \ Projects \ ConsoleApplication3 \ Debug \ ConsoleApplication3.exe Datei: minkernel CRTs \ \ ucrt \ src \ appcrt \ \ isctype.cpp conversion: 36
Ausdruck: c> = -1 & & c < = 255
Informationen darüber, wie Sie Ihr Programm ein Assertionsfehler führen kann, finden Sie in der Visual C++ Dokumentation behauptet.
(Drücken Sie erneut, um die Anwendung zu debuggen) ConsoleApplication3.exe hat ausgelöst einen Haltepunkt.
Debug-Assertion fehlgeschlagen!
Programm: ... 15 \ Projects \ ConsoleApplication3 \ Debug \ ConsoleApplication3.exe Datei: minkernel CRTs \ \ ucrt \ src \ appcrt \ \ isctype.cpp conversion: 42
Ausdruck: c> = -1 & & c < = 255
Informationen darüber, wie Sie Ihr Programm ein Assertionsfehler führen kann, finden Sie in der Visual C++ Dokumentation behauptet.
(Drücken Sie erneut, um die Anwendung zu debuggen) ConsoleApplication3.exe hat ausgelöst einen Haltepunkt. Das Programm '[13188] ConsoleApplication3.exe' wurde mit dem Code 0 (0x0) beendet.
Sie haben ein Array von 100 Zeichen, aber Sie greifen auf die Zeichennummer 101 zu. Sie können auch außerhalb der eingegebenen Zeichenfolge gehen, da Sie nicht nach dem String-Terminator suchen und dadurch auf nicht initialisierten Speicher zugreifen. Normalerweise haben Sie keine Beschränkung für die Eingabe, was bedeutet, dass der Benutzer mehr als 100 Zeichen in Ihr Array schreiben könnte. All diese Probleme führen zu * undefiniertem Verhalten *. –
Und Sie könnten bei dem ersten Null-Zeichen, das Sie übrigens finden, anhalten. aber die Nachricht ist lustig. Wie kann 'c> = -1 && c <= 255' für ein Zeichen fehlschlagen? –
Und der Teil dieses Arrays, der nicht mit 'scanf' gefüllt ist, ist nicht initialisiert, so dass die Überprüfung seiner Werte wertlos ist. –