我想编写一个程序,它获取字符串'ch1'的前半部分并将其放入字符串'ch3'然后获取另一个字符串'ch2'的前半部分并将其连接到'ch3'中“puts is在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;
}
如果有人帮助我,我将不胜感激。 感谢
答案 0 :(得分:1)
您可以将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);
上:
strncpy(s, ct, n)
这是必需的,因为C中的字符串需要以空值终止(意味着在字符串的最后一个字符之后需要值0以标记字符串的结尾)。如果ct
的字符数少于n
(不是您的情况),则函数strncat
仅填充零,因此,如果您不手动添加空字符,ch3
会认为ch3
要长得多。它将在<div id="app">
<select v-model="selected">
<option disabled value="">Please select one</option>
<option v-for="item in selected"></option>
</select>
开始后搜索内存中的第一个零,并且只在那里它将连接你想要的内容。这就是那些奇怪的角色来自的地方。