今天看完输入输出,其中教了这样来输入一个字符串
char a[30];
scanf("%s",a);
书上说你不要输入大于定义位数的字符串,但是我很好奇,输入了会怎样?
于是我写了:
char a[5];
scanf("%s",a); //键入123456
printf("%s\n",a); //输出123456
printf("%d",sizeof a); //输出5
奇怪明明是sizeof=5,为什么可以输出6位呢
于是我试了试:
#include<stdio.h>
#include<string.h>
int main(void)
{
char a[5];
int b ,c;
scanf("%s",&a); //键入123456
printf("%s\n",a); //输出123456
printf("%c\n",a[5]); //输出6
b=strlen(a);
c=sizeof a;
printf("%d and %d",b,c); // 输出6 and 5
return 0;
}
这里可以看出来 strlen测量出来是6,而sizeof是5
然后我又把输出a[5]哪一行改为
printf("%d\n",a[6]);
最终输出了0,也就是’\0’
让大家更加了解其中的原理,为什么strlen输出是6呢,因为strlen是到达\0结束计数,而你告诉过计算机a有5位,所以sizeof判断为5.
总结,当你scanf一个大于你设定的长度的字符串时,系统会给更多的空间来存储这些多余的字符,而且你可以用a[5],或者更大的下标来检索这些字符,但是在某些地方比如sizeof,会默认只有你设定的长度。
ps:
scanf("%s",a);
也可以用scanf("%s”,&a);
就算a是一个数组。。