摘要: 代码如下int main(){ printf("%f\n", 5); printf("%d\n", 5.01); return 0;}结果如下:第一个结果0.000000第二个结果 是一个大数。解释如下:首先参数5为int型,32为平台中为4字节,因此在stack中分配4字节的内存,用于存放参数5.然后printf()根据说明符 "%f",认为参数应该是个double型?(在printf函数中 float会自动转换成double?)因此从stack中读取了8个字节。很显然,内存访问越界,会发生什么情况不可预料。于是printf(&qu 阅读全文
posted @ 2012-09-24 13:31 XhBinary 阅读(124) 评论(0) 推荐(0)
摘要: 最近看到一道题目,是这样的int main(void){ char s[] = "123456789"; char d[] = "abc"; strcpy(d, s); printf("%s, %s\n", d, s); return 0;}问输出结果。运行后发现是123456789,56789.源字符串被截掉一部分。解释说是因为分配内存地址是连续内存的原因。这个我能理解。因为是这样分配的 abc\0123456789\0,因为前者空间不足,所以复制后将后者一本分覆盖掉了,所以输出结果是123456789,56789.有一点不能理解的 阅读全文
posted @ 2012-09-23 12:51 XhBinary 阅读(346) 评论(0) 推荐(0)