-3

我想编写一个程序,它获取字符串'ch1'的前半部分并将其放入字符串'ch3',然后获取另一个字符串'ch2'的前半部分并将其连接到'ch3'中“放在最后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;
}

如果有人帮助我,我将不胜感激。谢谢

4

1 回答 1

2

您可以初始化ch3[]为全零:或者您可以在将前半部分复制到它之后char ch3[200] = { 0 }; 手动放置空终止符(字符'\0'):ch3ch1

strncpy(ch3, ch1, strlen(ch1) / 2);
ch3[strlen(ch1)/2] = '\0';
strncat(ch3, ch2, strlen(ch2) / 2);

这是必需的,因为 C 中的字符串需要以空值结尾(这意味着您需要在字符串的最后一个字符之后使用 0 值来标记字符串的结尾)。如果字符少于(不是您的情况),该函数strncpy(s, ct, n)仅用零填充,因此,如果您不手动添加空字符,则会认为这要长得多。它会在 ' 开始后搜索内存中的第一个零,只有在那里它才会连接你想要的东西。这就是那些奇怪的角色的来源。ctnstrncatch3ch3

于 2017-04-03T20:31:32.360 回答