今天发现一个奇怪的现象,写了一个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?