我写了一个简单的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;
}
如果有人帮助我弄明白为什么它会像这样,以及我如何纠正它,我将非常感激?
答案 0 :(得分:5)
strncpy
不会添加空终止符。
试试这个:
strncpy(name, name1, 2);
name[2] = '\0';