C-使用strncpy和strncat的怪异输出



我想编写一个程序,该程序获取字符串'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的开始后搜索内存中的第一个零,只有在那里,它才能使您想要的内容串联。那是这些怪异字符的来源。

相关内容

  • 没有找到相关文章

最新更新