编写程序:用gets和puts实现两字符串前半段合并并输出
解决方案:拼接两个字符串的前半部分到新字符串
没问题,我直接给你写好符合要求的代码,再把细节讲清楚,你能一目了然每部分的作用:
#include <stdio.h> #include <string.h> int main() { // 定义足够大的字符数组,避免溢出(这里设为100/200,可根据实际需求调整) char CH1[100], CH2[100], CH3[200]; int len1, len2; // 读取两个输入字符串 printf("请输入第一个字符串CH1:"); gets(CH1); printf("请输入第二个字符串CH2:"); gets(CH2); // 计算两个字符串的长度 len1 = strlen(CH1); len2 = strlen(CH2); // 复制CH1的前半部分到CH3 // 整数除法规则:长度为5时取前2个字符,长度为4时取前2个 strncpy(CH3, CH1, len1 / 2); // 手动添加字符串结束符,防止输出乱码 CH3[len1 / 2] = '\0'; // 把CH2的前半部分追加到CH3后面 strncat(CH3, CH2, len2 / 2); // 输出最终结果 printf("\n拼接后的字符串CH3:"); puts(CH3); return 0; }
关键细节说明
- 关于
gets()的提醒:虽然题目要求用gets(),但得告诉你,这个函数因为没有边界检查,很容易造成缓冲区溢出,现代C标准(C11及以后)已经把它废弃了,实际开发里建议用fgets()替代。 - 前半部分的灵活调整:代码里用了
len/2的整数除法,如果想把奇数长度字符串的中间字符也算进前半部分(比如长度5取前3个),可以改成(len + 1)/2,按需调整就行。 - 字符串结束符的重要性:
strncpy()不会自动添加'\0',所以我们手动给CH3补上,不然输出时会出现乱码;而strncat()会自动处理结束符,不用额外操作。
示例运行效果
输入:
Hello
World
输出:
拼接后的字符串CH3:HeWo
如果输入长度为奇数的字符串,比如Program(长度7)和Language(长度8),输出就是ProLang(前3个+前4个)。
内容的提问来源于stack exchange,提问作者rtg2.
相关产品推荐
相关产品推荐

