sizeof返回a分配到的内存字节数
strlen返回的是实际字符串长度,长度是指从数组下标为0开始,直到非'\0'字符的下标前一位的长度
char a[7]="123\010\032";
在此语句中,a在内存中分配到字节数为7 * sizeof(char) 等于7字节的内存
所以sizeof返回7
而接下来的赋值操作中,实际上真正被赋值的段是"123\0",后面的"10\032"将被忽略
所以赋值后用strlen取出来的字符串实际长度是3(不包括结尾标志)
当然,如果你的语句改成
char a[7]="1231032";(你想要实际赋值实际长度为7)
编译的时候会报错,说a下标越界,这是因为虽然要赋长度为7的字符串,但是还有一个结尾符'\0',真正要使用到的内存是8个字节,超出定义的7字节