strncpy附加1个额外(奇怪或随机)char

时间:2013-03-17 06:55:38

标签: c substring concatenation strncpy

我写了一个简单的c程序,只取一个单词的前两个字符并取第二个单词的最后三个字符。我使用strncpy只将name1的前两个字母复制到name,并与name2中的最后三个字符连接。

然而,当我运行它。输出会以某种方式像

Ediacy //correct

acy  //wrong

Ed?
acy  //wrong

Edk
   acy //wrong

Edv
   acy //wrong

// code sample
#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[100];

    char name1[] = "Edison";
    char *name2 = "Tracy";

    strncpy(name, name1, 2); // instead of get Ed, it tried to append one extra char behind it.
    strcat(name, name2+2);

    printf("%s\n", name);

    return 0; 
}

如果有人帮助我弄明白为什么它会像这样,以及我如何纠正它,我将非常感激?

1 个答案:

答案 0 :(得分:5)

如果大小太小,

strncpy不会添加空终止符。

试试这个:

strncpy(name, name1, 2);
name[2] = '\0';