有人可以解释一下这是个什么样的问题吗?
我编了一个如下的程序:
#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)。
[解决办法]