检测数组越界时出现的一个问题
时间:2010-11-07 来源:剑子与剑痴
#include<stdio.h> |
结果:
按运行结果来分析:
int型变量 x 占4字节单元 :1245053--1245050
char型数组str占10字节单元 :1245049--1245040(这里注意下,1245040为数组第一元素地址,1245049为数组最后一元素地址)
执行语句:strcpy(str,"www.it315.org\n"); 时,www.it315.org里的字符写进数组里,而越界的"org\n"写到了变量x所占的内存区中:
结构如下图:
/********************************************************************
好,现在问题来了:
1.当输出x的地址时,程序输出的是:124502(字符'g'),而不是1245053(字符'\n');
2.当我输出x的值时,结果为:2663,其所对应2进制为:0000 1010 1011 0111 ;
注意到:
\n' ASCII为;10,换成2进制;0000 1010 ;
'g' ASCII为103,换成2进制;1011 0111 ;
也就是说:输出X的值时只输出了前两字节的内容,后面两字节被丢弃。
*******************************************************************/
如有高手看到,随便解答下,不胜感激