我遇到strncpy()
问题,需要按照我需要的长度复制一个额外的字符。我需要将10个最高有效位从一个字符串复制到另一个(均为char*
格式)。strncpy()字符串长度输出错误
较大的变量的大小并不直观,而较小的只影响输出,当它显着小于我需要的值(我不知道这是为什么)。
我的strncpy()
中的n值可能是导致问题的原因,但我不知道为什么它按照原样行事。如果我没有弄错,n,即目标字符串的长度,应该比数据长1,以便在最后说明空字符。
我的字符串没有这样的行为。设置n
到11
,我收到以下输出:
00000111101100100100001110100000
00000111101
我会想象它只会复制10个字符,最后一个为空。增加n
产生相同的结果。
增大或减小n至10揭示了问题的心脏:
00000111101100100100001110100000
[email protected]
我不知道为什么它会做到这一点,但它仍然要做到这一点正下降,直到n
小得多(约8)。
这些是我的代码的相关线路:
char line[11], hexAddr[8], binAddr[33], lv1Index[11];
...
strncpy(lv1Index, binAddr, 10);
其中lv1Index
是在此之前不动,并显示binAddr(在给定的输出)直接预先。
添加的字符总是@
,所以我不相信这是从lv1Index
预初始化的垃圾。
+1,而且,如果他知道原始字符串的长度超过10个字符,他应该使用'memcpy',而不是'strncpy' – Paulpro
啊,好吧,我仍然不完全明白为什么一切都是这样发生的(为什么不同的n值改变了输出,看起来与目的地的大小无关),但是这解决了我的问题。谢谢! –