char a[10];
int i;
for (i = 0; i < 10; i++)
scanf_s("%c",&a[i]);
printf("%s",a);//我打10个字符以上后就会输出一些随机的数字,为什么啊?
char a[10]
在char数组的初始化后 每个元素默认是'\0'(结束标识),当你输入10或者超出10个以后'\0'都被其他字符替代了,而你用printf("%s",a)进行输出时函数会一直
进行打印直到遇到'\0'
char a[10];
你的字符数组长度就是10.
十个以上已经超出数组的下标,已经越界,所以出现错误。
你就定义了10大小的数组,数组以‘/0结束,你输入到第10个数的时候就没有结尾标志了。
char a[N];
有效范围是0~N-1,第N位是'\0'结束符
字符串的结束符被覆盖了~
因为你定义的数组长度只有10,输入多余十个就会出现数组下表越界,也就是说你开始的10个都存进去了,后面的没有存进去,打印了会出现“烫”等一些乱七八糟的东西。
长度是10,超过十之后就会越界啊
字符长度才是10,为什么要打印10个数值以上?超界了。。。
'\0'被取代了,打印会一直打印直到遇到‘\0’,所以就乱了
越界访问,,,,,内存中本来就有东东的
#include
#include
#include
using namespace std;
int main()
{
char a[10];
int i;
for (i = 0; i < 5; i++)
scanf("%c",&a[i]);
printf("%s",a);//我打10个字符以上后就会输出一些随机的数字,为什么啊?
}
用codeblock编译并不会出现随机数
你定义的数组长度就是10啊
十个以上已经超出数组的下标,已经越界,所以出现错误。