我只是运行这段代码,我得到的n = 1不是我期望得到的。您能解释为什么会这样吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXRIGA 11
int main()
{
char s[MAXRIGA+2];
char a[MAXRIGA]="pippo";
strncpy(s, a, 1); // n=1
printf("%s", s);
return 0;
}
退货
pF
相反,如果n = 2或更多,我得到我想要的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXRIGA 11
int main()
{
char s[MAXRIGA+2];
char a[MAXRIGA]="pippo";
strncpy(s, a, 2); // n=2
printf("%s", s);
return 0;
}
退货
pi
最佳答案
从 man strncpy
:
strncpy()函数与之类似,除了src的最多n个字节
被复制。警告:如果前n个字节中没有空字节
如果是src,则放置在dest中的字符串将不会以null终止。
您仅从源字符串中复制一个字节,而不是空终止符。因此,您在尝试打印未终止的字符串时会出现未定义的行为。 n=2
也是如此,这似乎是偶然产生的。