请问字符数组输出结果后面为什么会跟一个问号(语言-c语言)

#include <stdio.h>
#include<string.h>
#pragma warning(disable:4996)
int main()
{
    char a[5] = { 0 };
    int i;
    gets_s(a);
    for (i = 0; i < 5; i++)
        printf("%c", a[i]);
}

输入:213
运行结果:213?

用的是VS

输入213,那a数组有效长度是3,不是5。所以你把数组中无效字符输出了,就成乱码。5改为strlen(a)

没有5个字符嘛,用puts(a);输出。

#include "stdio.h"
int main()
{
    char a[5] = { 0 };
    int i;
    gets_s(a);
    puts(a);
}

gets函数的形参是一个指针