这段代码好奇怪

来源:百度知道 编辑:UC知道 时间:2024/06/23 02:56:32
#include <stdio.h>
#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;
}
这段代码明显存在溢出嘛,我输入超过九个字符就会溢出啊,可是结果却没有溢出,完整的输出了我的输入,这是怎么回事?

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