最近在探讨关于缓冲区溢出的相关问题,各位大侠帮忙看看这个程序,两个for循环导致内存内容不一样,其中的玄妙在哪里?我是嫩草,谢啦谢啦~~

 

 

/*缓冲区溢出实验操作*/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
  int i='a';  /* char  i='a';*/
  char prepare[6];
  char *nowString="abcdefghijklmnopXqrstuvwxyz";
  strcpy(prepare,nowString);

  printf("size(int):%d/n",sizeof(int));// 本机器上 int 4字节
  printf("size(char):%d/n/n",sizeof(char));//本机器上 char 1 字节


  printf("%s-----nowString/n",nowString);
  printf("%s-----prepare/n",prepare);
   
  /*******************************************/
   /*两个for循环,执行后为什么使内存中的数据不一样了呢?1 和 2 的结果不相同,原因在哪里?for中对i初始化时,编译器做了什么?*/
*/

  for(;i<'k';i++)printf(" ");          /* 1 */         /*字符串空间跟 i 的存储空间重合了,修改i的值是字符串的数据也发生变化*/
 // for(i='a';i<'k';i++)printf(" ");  /*  2 */       
  /* 1 中的i++似乎没有往i的存储空间写数据?*/

  /************/
  /*******************************************/


  printf("%s/n",prepare+10);

  printf("%ld/n",(int *)&i); /*(char *)&a */    //缓冲区溢出,变量i的存储空间跟字符串空间复合掉了
  printf("%ld",prepare+16);//i 的地址跟 字符串某一字符地址相同

  printf("/n");

  printf("prepare[15]:%c/n",*(prepare+15));

  printf("prepare[16]:%c/n",*(prepare+16));

  printf("prepare[17]:%c/n",*(prepare+17));

  printf("prepare[17]:%c/n",*(prepare+18));

  printf("prepare[17]:%c/n",*(prepare+19));

  printf("prepare[17]:%c/n",*(prepare+20));

  printf("prepare[17]:%c/n",*(prepare+21));

  printf("prepare[17]:%c/n",*(prepare+22));


  while(1);
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值