程序崩溃

时间:2016-09-16 19:27:57

标签: c++ debugging visual-studio-2015

我正在尝试编写代码来检查大写字母的密码。 当我用大写字母键入密码时,程序按预期运行(打印输出'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)。

2 个答案:

答案 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++) 

注意:如果没有大写字母,你就会超出界限。