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