C语言字符输出问题123123

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啊

十个以上已经超出数组的下标,已经越界,所以出现错误。