C语言字符串数组bug

请问为什么我的输出结果很奇怪 理应是1995.11.11 但实际却是 birth:1995.11.11110111199511111101

#include<stdio.h>
int main(){
    char sfz[18];
    char sr[10];
    char sex;
    scanf("%s",sfz);
    int i,k;
        for(k=0,i=6;k<=9,i<=13;k++,i++){
            if(k==4){
                sr[k]='.';    
                i--;
                continue;
            }
            
            if(k==7){
                sr[k]='.';
                i--;
                continue;
            }
            sr[k]=sfz[i];
        }
    if(sfz[16]%2==0){
        sex='F';
    }
    else{
        sex='M';
    }
    printf("birth:%s\n",sr);
    printf("sex:%c",sex);
    return 0;
}

字符数组就是指向一块连续内存的内存地址指针常量,数组长度要比实际存放数据长度多1,用于在最后一位存放结束符'\0',%s输出时遇到这个结符就认为数据已经结束。否则,如果数组及其之后的这段连续内存中刚好有数据,也会一起输出,出现意想不到的结果。