首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有人可以解释一下这是个什么样的有关问题吗

2012-03-06 
有人可以解释一下这是个什么样的问题吗?我编了一个如下的程序:#include stdio.h#include stdlib.h#inc

有人可以解释一下这是个什么样的问题吗?
我编了一个如下的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{char *a;
int b;
scanf("%d",&b);
a=(char *)malloc(sizeof(char *)*b);
scanf("%s",a);
printf("%s",a);
}
当我输入1的时候应该是只能输入一个字符啊!可以我输入1后再输入dragon,它仍然会打印出dragon,请问这是怎么一会事?


[解决办法]
%s 输出/读取 数据的时候,它不校验边界,操作一直到遇到字符串终结符号为止

所以,即使这里越界了,依然可以输出dragon,
但是,因为这个是越界操作,所以,崩溃的可能随时存在
[解决办法]
确实,你只申请了1个字节,但是用了很多字节,这个虽然可以运行,但是溢出了,不安全。
另外,其实你也不是申请了1个字节,你申请了char *的大小,是4个字节,应该改成 sizeof(char)。
[解决办法]

探讨
请问要怎么样避免这个错误?用gets和puts?

热点排行