关于Run-Time Check Failure #2

来源:互联网 发布:钱学森回国真相知乎 编辑:程序博客网 时间:2024/05/18 11:12

     这个问题源自《The C Programming Language》P49 p3-2习题中,当输入一系列字符串后,再键入Ctrl - Z时,出现了。

 

     代码:

    

     当用L45的注释代替本身的while语句时,出现了上述错误,见下图:

     CRT

 

     分析:

 

     1,  这个错误一般是因为给变量分配的空间出现越界访问导致的(绝大部分是数组越界),当L45中的while中的判读条件为:

          (c = s[j]) != EOF时,就会导致这个错误的出现,修改成(c = s[j]) != '/0',则问题解决。

          原因:EOF是文件结尾符,而'/0'是字符串结尾符,例如s = "abdc/0",本来原意是当while循环执行到s[4] = '/0'时,就

          要结束函数escape了,但由于此时判断条件是eof,故当s[j] = '/0',仍然进入while的循环体继续执行里面的语句,这样

          就将s[4]之后的95个'/0'全部都赋给t字符串了,当执行到c = s[99] != EOF时,仍然进入while循环体,导致++j,

          j = 100,然后又调回到while判断条件中执行c = s[100] != EOF,此时问题来了,当执行c = s[100]时,访问字符

          s[100]时,出现了越界情况(s数组的最大访问下标为99),所以出现了上述错误。

 

 

 

 

原创粉丝点击