可以无限输入字符字符的程序

今天发现一个奇怪的现象,写了一个c程序,用gcc编译器编译,居然没有报错,而且还能正常运行

看代码:

 1  #include <stdio.h>
 2  #include <stdlib.h>
 3  
 4  int main()
 5  {
 6      char *p = (char*)malloc(1); //申请了一个很小的空间
 7      printf("len is %d\n", strlen(p));//打印p所指的大小
 8      printf("addr:0x%x\n", (int)p);//打印p所指的内存地址
 9      gets(p);//从键盘读入一行字符
10      //scanf("%s", p);//或者用scanf来读,结果一样
11      printf("len is %d\n", strlen(p));//打印读入字符后的长度
12      printf("addr:0x%x\n", (int)p);//打印读入字符后的内存地址
13      printf("%s\n", p);//打印读入的内容
14      free(p);
15      p = NULL;
16      return 0;
17 }

虽然我申请了很小的空间(一个字节),但是p还是可以接收我输入的任意长的字符串,并且可以看到p所指的空间确实是增大了!!

运行结果:

 

这能不能算gcc的一个bug?

posted @ 2013-03-12 18:11  mender  阅读(240)  评论(0编辑  收藏  举报