在线等,谁能帮我看一下这个C语言程序错在哪里了,谢啦!

#include<stdio.h>intmystrcat(str1,str2);voidmain(){charstr1[50],str2[50],i,j;printf("... #include <stdio.h>
int mystrcat(str1,str2);
void main()
{
char str1[50],str2[50],i,j;
printf("请输入两个字符串:\n");
gets(str1);
gets(str2);
mystrcat(str1,str2);
printf("连接后得到的字符串为%s,mystrcat(str1,str2));
}
int mystrcat(str1,str2)
{
int i=1,k=0;
gets(str1);
gets(str2);
while(str1[i])
i++;
while(i<49)
if(str2[k])
str1[i++]=str2[k++];
else break;
str1[i]='\0';
return(str1);
}
展开
 我来答
百度网友3a074977f
2011-12-14
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
修改后的代码见下方:
修改的地方及修改原因看语句的注释:
#include <stdio.h>
char* mystrcat(char str1[] ,char str2[]);//返回值为字符串,所以应该是char*而不是int;参数传递也传的是字符串,char str1[]或者char* str1
void main()
{
char str1[50],str2[50];
printf("请输入两个字符串:\n");
gets(str1);
gets(str2);
printf("连接后得到的字符串为%s",mystrcat(str1,str2));//删除了print函数之前的mystrcat(str1,str2),否则做了两次字符串拼接,成了str1+str2+str2
}

char* mystrcat(char str1[] ,char str2[])
{
int i=1,k=0;
while(str1[i]) //删除之前的gets(str1)和gets(str1),两个字符串的值已经传递进子函数,不应再次输入
i++;
while(i<49) //if和else是语句块,应用{}括起来
{
if(str2[k])
str1[i++]=str2[k++];
else break;
}
str1[i]='\0';
return(str1);
}
追问
参数传递也传的是字符串,char str1[]或者char* str1,这一句中的char str1[]和char* str1是等价的吗?
还有 printf("连接后得到的字符串为%s",mystrcat(str1,str2));//删除了print函数之前的mystrcat(str1,str2),否则做了两次字符串拼接,成了str1+str2+str2 这一处是不是因为在printf函数中已经调用了mystrcat函数,所以无需再在之前写mystrcat(str1,str2)了?
追答
char str1[]和char* str1是等价的,char str1[]实际上传到子函数的是str1这个字符串的首地址;而char* str1这个指针指向的也是字符串的首地址,数组和指针是可以互换的。

去掉mystrcat(str1,str2))确实是因为printf函数中已经调用了mystrcat函数。
松甜恬0Je4ba
2011-12-14
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
你的程序问题比较多:
(1)函数的参数没有类型
(2)函数的返回类型和实际返回类型不一致
(3)分不清到底哪个gets是你想要的,为什么要主函数输入一次,在下面的函数中还要输入一次呢???
(4)while没有大括号,
(5)建议你还是多看看书吧,下面是我给你写的一个,你试试吧。

#include<stdio.h>
#include<malloc.h>
#include<string.h>
char *mystrcat(char* dest, char* src)
{
char *tmp = (char*) malloc((strlen(dest)+strlen(src)+1)*sizeof(char));
int i=0;
while(*dest!='\0')
tmp[i++] = *dest++;
while(*src!='\0')
tmp[i++] = *src++;
tmp[i] = '\0';
return tmp;
}

int main()
{
char a[]="abcde";
char b[]="fghij";
printf("%s",mystrcat(a,b));
return 0;
}
追问
我们暂时还未学到地址的相关知识,我现在有一个疑惑:在mystrcat(str1,str2)可不可以返回整个字符串的值呢,是不是return只能返回一个数或者字符啊?
追答
可以返回一个指针来指向字符串的其实地址,这样我们就相当于返回整个字符串的值。
程序中的char *就是这样来的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式