/*缓冲区溢出实验操作*/
#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);
}