C语言进制转换的问题

/编写函数 void dex_bin(int x ,char s[ ]) 
 其功能是:将整数x(x>=0 小于128),
转换成字符串形式的8位的二进制码存放到s串中。
/
#include<stdio.h>
int main()
{ int i,j,x=49;
char s[9];

for(i=7;x;i--)
{   s[i]=x%2+48;
    x=x/2;
}
for(j=i;j>=0;j--)
    s[j]=0+48;     

puts(s);
}/编写函数 void dex_bin(int x ,char s[ ]) 
 其功能是:将整数x(x>=0 小于128),
转换成字符串形式的8位的二进制码存放到s串中。
/
#include<stdio.h>
int main()
{ int i,j,x=49;
char s[9];

for(i=7;x;i--)
{   s[i]=x%2+48;
    x=x/2;
}
for(j=i;j>=0;j--)
    s[j]=0+48;     

puts(s);
}

img

img

img


发生了越界;
字符串的末尾以'\0'结尾,在最后加'\0'试试

为什么输出的时候会多几个符号