这段代码好奇怪

[复制链接]
查看11 | 回复1 | 2008-7-30 14:28:36 | 显示全部楼层 |阅读模式
#include
#include "string.h"
int main()
{
int ret;
char hehe[1024];
char buffer[10];
scanf("%s",hehe);
strcpy(buffer,hehe);
printf("%s\n",buffer);
return 1;
}
这段代码明显存在溢出嘛,我输入超过九个字符就会溢出啊,可是结果却没有溢出,完整的输出了我的输入,这是怎么回事?

回复

使用道具 举报

千问 | 2008-7-30 14:28:36 | 显示全部楼层
这就是c为什么是不安全型的原因buffer相当于一个字符指针,就是一个地址strcpy函数从这个地址开始往里拷贝字符,直到\0位置,既便字符串已经超出了buffer声明的10个字节也就是说字符串的后半部已经属于非法内存了但是print一个字符串的算法也是从字符串首地址开始读,直到\0为止.那么只要超出buffer[10]这块地址的部分不被其他应用覆盖,字符串输出结果还是对的.更可怕的是如果溢出这部分正好是别的程序的空间,就麻烦了.不禁想起:出轨并不可怕,可怕的是出轨时刚好被撞到:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行