有关C语言的一个奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:36:59
请教:
大家好.请看下边几行代码:
main()
{
char a[5];
scanf("%s",a);
printf("%s",a);
getch();
}
这里我定义的数组长度为5,为什么我从键盘输了5个以上的字符却能全部显示出来??
那如果像 amwbj 所说的那样,,,那么定义字符串长度还有什么意义呢..??反正不管定义多长都不影响输入??

字符串输出时候就是这样
长度不够的时候加空格,超过原样输出

因为...你用的是字符串...%c才是字符变量吧...
%s是指一个字符串指针赋值
char a[5];
a本身就是一个指针了...

scanf用"%4s"
(留一个字符给'\0')

因为C库的scanf没有作边界检查,缓冲区溢出就可以是这么搞的

数组的赋值有两种,一个是在初始化的时候赋入初值:
char a[5]="abcde";
或者用循环语句赋值:
char a[5];
int i;

for(i=0;i<5;i++){
scanf("%c",&a[i]);
printf("%c",a[i]);
}