c++中什么叫内存的越界操作?举一个简单的例子说明一下

2025-02-28 14:05:22
推荐回答(3个)
回答1:

#include
#include
#include
#define FileName "MyFile"
int main(int argc,char* argv[])
{FILE *fd;
long diff;
char buffchar[100];
char *buf2=(char *)malloc(20);
char *buf1=(char *)malloc(20);

diff=(long)buf2-(long)buf1;
strcpy(buf2,FileName);

printf("---------信息显示1:-------\n\n");
printf("buf1存储地址:%p;\n",buf1);
printf("buf2存储地址:%p;存储内容为 文件名 %s ;\n",buf2,buf2);
printf("两地址距离:%d个字节;\n",diff);
printf("---------信息显示结束1:-------\n\n");

if(argc<2)
{printf("请输入要写入文件 %s 的字符串:\n",buf2);
gets(buffchar);
strcpy(buf1,buffchar); //此函数存在溢出漏洞.当buffchar的长度大于diff时, 会把buf2的内容覆盖掉
}
else
{
strcpy(buf1,argv[1]);
}
printf("---------信息显示2:-------\n\n");
printf("buf1中的内容:%s;\n",buf1);
printf("buf2中的内容:%s;\n",buf2);
printf("---------信息显示结束2:-------\n\n");

printf("将%s写入到%s中\n",buf1,buf2);
fd=fopen(buf2,"a");
if(fd==NULL)
{printf("文件%s打开错误\n",buf2); getchar();
exit(1);}

fprintf(fd,"%s \n",buf1);
fclose(fd);
getchar();

return 0;
}

回答2:

简单例子:
int a[3]={1,2,3};
printf("%d",a[4]);

回答3:

LS言简意赅~