我想编写一个程序,该程序获取字符串“ ch1”的前半部分并将其放入字符串“ ch3”,然后获取另一字符串“ ch2”的前半部分并将其连接在“ ch3”中。 ch3”,但是当我执行它时,ch3的输出却很奇怪。
例如 :
ch1 ="123"
ch2 ="azertyuiop"
结果 :
ch3 =“ 1 azert”
这是我的代码:
int main()
{
char ch1[200],ch2[200],ch3[200];
puts("give 'ch1' ");
gets(ch1);
puts("give 'ch2' ");
gets(ch2);
strncpy(ch3,ch1, strlen(ch1)/2 );
strncat(ch3,ch2, strlen(ch2)/2 );
printf("a half \"%s\" + a half \"%s\" gives \"%s\"",ch1,ch2,ch3);
return 0;
}
如果有人帮助我,我将不胜感激。
谢谢
最佳答案
您可以将ch3[]
初始化为全零:char ch3[200] = { 0 };
或者,您可以在将'\0'
的前半部分复制到它后,将空终止符(字符ch3
)手动放置在ch1
上:
strncpy(ch3, ch1, strlen(ch1) / 2);
ch3[strlen(ch1)/2] = '\0';
strncat(ch3, ch2, strlen(ch2) / 2);
这是必需的,因为C中的字符串需要以空值结尾(这意味着您需要在字符串的最后一个字符之后标记0来标记字符串的结尾)。如果
strncpy(s, ct, n)
的字符少于ct
的字符,函数n
仅填充零(不是您的情况),因此,如果不手动添加空字符,strncat
会认为ch3
太多更长。它会在ch3
开始后搜索内存中的第一个零,并且只有在那儿它才连接您想要的内容。那就是那些怪异人物的来历。关于c - 使用strncpy和strncat的奇怪输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42596837/