我想编写一个程序,该程序获取字符串'ch1'的上半部分,然后将其放在字符串'ch3'中,然后获得另一个字符串'ch2'的上半部分,然后串联它在" CH3"中" puts在CH3的末尾",但是当我执行它时,它为CH3提供了奇怪的输出。例如:
ch1 ="123"
ch2 ="azertyuiop"
结果:ch3 =" 1< 3rdweirdletter> 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 };
或者,您可以在将ch1
的上半部分复制到它之后,将null末端(字符' '
)放在ch3
上:
strncpy(ch3, ch1, strlen(ch1) / 2);
ch3[strlen(ch1)/2] = ' ';
strncat(ch3, ch2, strlen(ch2) / 2);
这是需要的,因为C中的字符串需要为null终止(这意味着您需要在字符串的最后一个字符之后的值为0来标记字符串的末端)。如果ct
的字符少于n
(不是您的情况),则该功能strncpy(s, ct, n)
仅具有为零的垫子,因此,如果您不手动添加null字符,则strncat
会认为ch3
更长。它将在ch3
的开始后搜索内存中的第一个零,只有在那里,它才能使您想要的内容串联。那是这些怪异字符的来源。