为何将字符窜的一部分存入到另一个数组出现乱码

为什么将字符窜的一部分存入到另一个数组出现乱码?
代码如下:
#include <stdio.h>
#include <string.h>
main()
{
  char *temp="we1234";
  char word[10];
  char digit1[2];
  char digit2[2];
  strncpy(word,temp,2);
  strncpy(digit1,temp+2,2);
  strncpy(digit2,temp+4,2);
  puts(digit1);
  getchar();
  }
   
显示的是:12后面有乱码,因为digit只定义了两位,为什么会有后面的乱码?

我把char word[10],改成了static word[10]就可以了
但是觉得digit和word[10]没什么联系,很奇怪啊

------解决方案--------------------
strncpy(digit1,temp+2,2),只复制2个字符,而且digit1也没初始化,输出12后,没遇到结束符 \0(即0x0),继续向后,直到遇见\0,或者访问违规崩了。

把几个数组初始化为0
char word[10]={0};