Strncpy()字符串长度输出错误



我在strncpy()复制我需要的长度的额外字符的问题。我需要将10个最重要的位从一个字符串复制到另一个字符串(都是char*格式)。

较大的变量的大小在直观上并不重要,较小的变量只有在明显小于我需要的值时才会影响输出(我也不知道为什么会这样)。

我的strncpy()中的n值可能是导致问题的原因,但我不知道为什么它的行为方式。如果我没弄错的话,目标字符串的长度n应该比数据长1,以解释末尾的空字符。

我的字符串根本没有这种行为。将n设置为11,我收到以下输出:

00000111101100100100001110100000
00000111101

我认为它只会复制10个字符,最后一个为null。增加n也会产生相同的结果。

将n减小到10揭示了问题的核心:

00000111101100100100001110100000
0000011110@

我不知道为什么它会这样做,但是随着n的减小,它继续这样做,直到n更小(大约8)。

这些是我的代码的相关行:

char line[11], hexAddr[8], binAddr[33], lv1Index[11];
    ...
strncpy(lv1Index, binAddr, 10);

在此之前lv1Index未被触及,并且binAddr直接在此之前显示(在给定的输出中)。

添加的字符总是@,所以我不相信它是来自lv1Index预初始化的垃圾。

从一个c++参考:

如果在复制num个字符之前找到源C字符串的结尾(用空字符表示),则用零填充目标,直到总共写入num个字符。

没有空字符隐式地附加到destination的末尾,因此只有当source中的C字符串的长度小于num时,destination才会以空结束。

其他文档(MSDN,手册页)也有类似的信息。

这意味着你应该把空终止符放在自己身上:

 lv1Index[10] = '';

相关内容

  • 没有找到相关文章

最新更新