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

Strncpy()字符串长度输出错误,c,string,strncpy,C,String,Strncpy,我在复制所需长度的额外字符时遇到问题。我需要将10个最高有效位从一个字符串复制到另一个字符串(都是char*格式) 从直觉上看,较大变量的大小并不重要,较小的变量只会在其显著小于我需要的值时影响输出(我也不知道为什么会这样) 我的strncpy()中的n值可能是导致问题的原因,但我不知道它为什么会这样。如果我没有弄错的话,n,目标字符串的长度,应该比数据长1,以解释结尾的空字符 我的字符串根本不是这样运行的。将n设置为11,我收到以下输出: 000001111011001001000011101

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

从直觉上看,较大变量的大小并不重要,较小的变量只会在其显著小于我需要的值时影响输出(我也不知道为什么会这样)

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

我的字符串根本不是这样运行的。将
n
设置为
11
,我收到以下输出:

00000111101100100100001110100000

00000111101
我想它只会复制10个字符,最后一个字符是空字符。增加
n
会产生相同的结果

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

00000111101100100100001110100000

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

以下是我的代码的相关行:

char line[11], hexAddr[8], binAddr[33], lv1Index[11];
    ...
strncpy(lv1Index, binAddr, 10);
其中,
lv1Index
在此之前未被触及,而binAddr(在给定的输出中)直接提前显示

添加的字符总是
@
,因此我不认为它是初始化前
lv1Index
中的垃圾。

来自:

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

没有空字符隐式附加到目标的结尾,因此只有在源中的C字符串长度小于num时,目标才会以空结尾

其他文件(,)也有类似的信息

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

 lv1Index[10] = '\0';

+1,同样,如果他知道原始字符串长度超过10个字符,他应该使用
memcpy
而不是
strncpy
啊,好吧,我仍然不完全理解为什么一切都是这样发生的(为什么不同的n值改变了输出,似乎与目标大小无关),但这解决了我的问题。谢谢