给电话薄排序输出错误 为什么





```#include 
#include
using namespace std;
struct people
{
    char name[10];
    char num[10];
}a[10];
int main()
{
    int n,i,l;
    struct people t;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin>>a[i].name;
        cin>>a[i].num;
    }
              
    for (i = 0; i < n-1; i++)
    {
        for (l = 0; l < n - i - 1; l++)
        {     
            if (strcmp(a[l].name,a[l+1].name)>0)
            {
                t = a[l+1];
                a[l+1] = a[l];
                a[l] = t;
            }
        }
    }
    for (i = 0; i < n; i++)
    {
        printf("%12s", a[i].name);
        printf("%12s\n", a[i].num);
        
    }

}****
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/040583606176189.png "#left")

name长度太短了,你输入名字有10个字符。而name当字符串使用,实际只能存储9个字符,最后一个字符必须存储字符串结束符。但你输入10个字符后,导致name没有字符串结束符,输出时会一直找到内存后面第一个字符串结束符为止,也就是num字符串后面的结束符。

看看那打印输出?