为什么输出的结果比预期的要多????
代码如下:   
 strncpy(ch,fname,15); 
 printf( "%s|\n ",ch);   
 输出结果如下:   
 TYSG09720070327ÿ|   
 为什么输出的结果不是15位我预期的结果是 
 TYSG09720070327|   
 问题到底处在哪里呢??? 
 后面的ÿ是怎么回事????
------解决方案--------------------strncpy并不能总是保证目标一定是以0结束的字符串,它只是忠实地复制n个字符而已。有时候你需要手工添加一个0。   
 strncpy的说明如下: 
         如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。 
         如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。 
         src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 
         返回指向dest的指针。 
------解决方案--------------------至于那个“y上面有两个点”的字符是ASCII码大于127的字符,未初始化的内存空间的内容是不可预测的。
------解决方案--------------------上面也解释了,但写这种程序的时候一定要注意结尾加 '\0 '. 
 比如: 
 1,可以在调用strncpy之前先将ch全部清零: 
 memset (ch, 0, 16); 
 2,也可以在调用strncpy 后:ch[15]=0;
------解决方案--------------------自己在结尾加‘\0 '