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

ede*_*ded 2 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; 
}
Run Code Online (Sandbox Code Playgroud)

我真的很感激,如果有人帮我弄明白为什么它会像这样,我怎么能纠正它?

Pub*_*bby 5

strncpy 如果尺寸太小,则不添加nul-terminator.

试试这个:

strncpy(name, name1, 2);
name[2] = '\0';
Run Code Online (Sandbox Code Playgroud)