关于Run-Time Check Failure #2

     这个问题源自《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),所以出现了上述错误。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值