结构体中字符串的输入输出

结构体中字符串的输入输出

问题描述:

#include<stdio.h>

int main(void)
{
    struct message
    {
        char sb[5];
        char name[10];
        int score;
    };
    int n;
    int i;
    scanf("%d",&n);
    struct message stu[n];
    for(i=0;i<n;i++)
    {
        scanf("%s %s %d",stu[i].sb,stu[i].name,&stu[i].score);
        printf("%s %s\n",stu[i].name,stu[i].sb);
    }
    return 0;
}

图片说明
结果和数组大小有关系,这是什么情况?,求大佬解答(卑微)

我觉着这个是数组越界导致的,刚才我测试了一下,结构体里面存放的变量地址是连续的,看下面的图;
起初你定义了一个sb[5],这个数组可以存放5个元素,但是我们知道存放字符串的时候,字符数组最后一个要存放\0以表示结束,
但上面实例,你存放了12345这5个元素已经占满了数组空间,所以无法存放\0结束符,在输出的时候该数组无法结束,
所以将会顺着地址一直往下输出,直到遇见\0结束输出,所以我们平时我们字符数组存放字符串的时候都是多开辟一个空间来存放\0结束符,
希望这个答案能帮到你。

图片说明

char sb[5];
这个长度不够,因为要考虑结束符号,所以最大只能存4个字符,而12345你输入了5个
修改为char sb[6];