C语言中sprintf赋值问题

在调试一段古老代码时发现的问题,本人C语言一窍不通,请教大神
sprintf((char *)TekiLim.arr, "%9.9s", TekiyoLim );
这段代码中TekiyoLim为201201102
为什么赋值以后,TekiLim.arr的值为201
声明如下:
struct { unsigned short len; unsigned char arr[10]; } TekiLim;

 sprintf((char *)TekiLim.arr, "%s", TekiyoLim );
 #include <stdio.h>

struct { unsigned short len; unsigned char arr[10]; } TekiLim;

int main(void) { 
    char * TekiyoLim = "201201102";
    sprintf((char *)TekiLim.arr, "%9.9s", TekiyoLim);
    printf("%s", TekiLim.arr);
    return 0;
}

结果:
201201102

改成"%9s"试一下

TekiyoLim 是什么类型

%9.9s有这种格式吗,又不是浮点数,改成%9s

根据如上内容所示 应该是 内容破坏

int sprintf( char *buffer, const char *format, [ argument] … );
这个函数包含三个部分的参数:
buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。即可选参数的想要输入的数据类型。[argument]...:可选参数,可以是任何类型的数据。

函数用法

直接是"%s"就可以吧

能不能把代码贴全 可能是其他语句改变了其中的内容
按你仅有的几句代码执行下来输出是对的,%9.9s就是取9位,不足9位的用空格补,右对齐