这个问题源自《The C Programming Language》P49 p3-2习题中,当输入一系列字符串后,再键入Ctrl - Z时,出现了。
代码:
当用L45的注释代替本身的while语句时,出现了上述错误,见下图:
分析:
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),所以出现了上述错误。