首页 新闻 搜索 专区 学院

用c语言定义一个连接两个字符串的函数

0
[待解决问题]

在下初学c语言,最近看到这样一道题但是解答中的一段代码有些疑惑(其实看不懂)
如下

/
字符串链接
/

include<stdio.h>

void link(char ch1,char ch2)
{
char ch[1000];
int i,j,k;
for(i = 0; ch1[i]!='\0';i++)
ch[i] = ch1[i];
for(k = 0;;i++,k++)
{
ch[i] = ch2[k];
if(ch2[k] == '\0')
break;
}
puts(ch);
}
int main()
{
char ch1[1000],ch2[1000];
gets(ch1);gets(ch2);
link(ch1,ch2);
return 0;
}
有没有大佬能帮忙解答一下,十分感谢!

14yang的主页 14yang | 菜鸟二级 | 园豆:202
提问于:2018-11-14 21:10

博问支持markdown代码高亮,建议给代码加上高亮

dudu 1年前

@dudu: 高亮是啥?

14yang 1年前
< >
分享
所有回答(3)
0

什么地方不懂?

吴瑞祥 | 园豆:28820 (高人七级) | 2018-11-14 21:28

可以讲一下这两个循环吗?

支持(0) 反对(0) 14yang | 园豆:202 (菜鸟二级) | 2018-11-14 21:30

突然间看懂了,第一个for是把ch1全部赋给ch,然后再从i+1开始把ch2赋给ch再输出对吧

支持(0) 反对(0) 14yang | 园豆:202 (菜鸟二级) | 2018-11-14 21:36
0

你的代码贴错了吧。
void link(char ch1,char ch2)

应该是
void link(char* ch1,char* ch2)

参数是char数组首地址也就是指针

其次这个link函数的功能实际上把ch1char数组和ch2char数组 合并到一起并输出。

第一个for循环复制ch1部分到ch中, 第二个for循环复制ch2部分:注意那个i

Shendu.CC | 园豆:1914 (小虾三级) | 2018-11-15 15:51
0

1.首先从main函数来看,从键盘中获取两个字符串,长度最大都为1000个字节,在进行链接 的时候,保持这两个字符串的数组最大长度也是1000字节,这明显就是一个bug。试想一下,加入两个读入的字符串的长度和大于1000个字节的,那么保存链接数据的数组必定长度不足。
2.从连接的link程序看,赋值给ch数组的结束标志是遇到'\0',那么问题就是,这两个字符串加入都没有出现'\0'且长度和大于1000的时候,程序马上就会崩溃,因为数组越界了。
3.连接字符串的前提是这两个字符串中到底有有没有空的字符串,如果有一方是空字符串,那就简单直接输出非空字符串即可;如果两个字符串都为空,那就直接返回或者不输出即可;如果有数据,那必须控制数组的长度,简单一点的可以使用strlen和malloc,free函数来进行操作,确保有足够的空间容纳两个字符串。

Psrion | 园豆:29 (初学一级) | 2018-11-29 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册