我只是运行这段代码,我得到的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也是如此,这似乎是偶然产生的。

09-28 02:20