C语言定义字符串数组,数组长度是预期长度的两倍

C语言定义字符串数组问题,使用大括号定义的数组长度是预期长度的两倍

char x[]="abcdefg";
    char y[]={'h','i','j','k','l','m','n'};

    int xl = strlen(x),yl = strlen(y);
    int i=0;
    //printf("%s",x[i]);

    puts(x);
    puts(y);

你看到的只是一个假象, strlen是用来计算字符串的, 你初始化时没有知道字符串结束符,计算出来的结果自然是错误的。
char y[]={'h','i','j','k','l','m','n', 0};

字符串必须0结束,并且strlen是字符串的长度,不是字符串数组的长度,后者用sizeof来得到。