|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#define N 12
main()
{
char name[N];
printf("input a string:");
gets(name);
printf("%s",name);
return 0;
}
我有宏定义N=12,为哈我输入超过12个字符后依然可以输出字符串,不是不能超过12个字符吗?
本帖最后由 jackz007 于 2020-12-27 19:37 编辑
字符数组越界,侵害到了相邻变量的存储内容,运行下面的代码就可以发现是怎么回事了。
- #include<stdio.h>
- #define N 12
- main()
- {
- char name1[N] = "0123456789" ;
- char name2[N] ;
- char name3[N] = "ABCDEFGHIJ" ;
-
- printf("input a string:") ;
- gets(name2) ;
- printf("name1 = %s\n" , name1) ;
- printf("name2 = %s\n" , name2) ;
- printf("name3 = %s\n" , name3) ;
- }
复制代码
编译、运行实况
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- input a string:you are my good friend !
- name1 = ood friend !
- name2 = you are my good friend !
- name3 = ABCDEFGHIJ
- D:\00.Excise\C>
复制代码
可见,当字符数组 name2 被越界使用的情况下, 相邻变量 name1 的内容已经完全被破坏了。
|
|