c语言问题:为什么总是这样,如图所示?

二、编写程序test5-2.c(60分)用函数调用方式编写程序。要求实现:(1)编写fun函数,其功能是计算并比较两个字符串的长度(要求不得使用标准库函数strlen),... 二、编写程序test5-2.c(60分)
用函数调用方式编写程序。要求实现:
(1)编写fun函数,其功能是计算并比较两个字符串的长度(要求不得使用标准库函数strlen),返回较长字符串的指针。若两个字符串长度相等,则返回第一个字符串的指针。
(2)编写main函数,在其中输入两个字符串,打开文件test5-2.dat,将fun函数计算出的两个字符串长度和返回结果分别显示在屏幕上,同时写入到文件test5-2.dat中。

#include<stdio.h> #include<process.h>
char *fun(char *s1,char *s2,int *n,int *m)
{
char *s;
int counter1=0,counter2=0;
while(*s1)
{
counter1++;
s1++;
}
while(*s2)
{
counter2++;
s2++;
}
if(counter1>=counter2)
{
*m=counter2;
s=s1;
}
else
{
*n=counter1;
s=s2;
}
return s;
}
void main() {
FILE *fp;
char *s1,*s2;
int n,m;
fp=fopen("test5-2.dat","w");
if(fp==NULL)
{
printf("Can not open this file!");
exit(0);
}
printf("pelase input:\n");
scanf("%s",s1);
scanf("%s",s2);
printf("%s",fun(s1,s2,&n,&m));
fprintf(fp,"%s",fun(s1,s2,&n,&m));
printf("%d",n,m);
fprintf(fp,"%d",n,m);
fclose(fp);
}
展开
 我来答
冰清翔龙
2012-09-24 · 超过15用户采纳过TA的回答
知道答主
回答量:31
采纳率:100%
帮助的人:37万
展开全部
已改,看注释

#include<stdio.h> #include<process.h>
char *fun(char *s1,char *s2,int *n,int *m)
{
char *ss1 = s1; // 先保存s1,s2
char *ss2 = s2;
char *s;
int counter1=0,counter2=0;
while(*ss1) // 改变的只是ss1
{
counter1++;
ss1++;
}
while(*ss2)
{
counter2++;
ss2++;
}
if(counter1>=counter2)
{
*m=counter2;
s=s1;
}
else
{
*n=counter1;
s=s2;
}
return s;
}

void main()
{
FILE *fp;
char s1[50],s2[50]; // 写成数组,不要写成指针,因为指针没分配内存
int n = 0,m = 0;
fp=fopen("test5-2.dat","w");
if(fp==NULL)
{
printf("Can not open this file!");
exit(0);
}
printf("please input:\n");
scanf("%s",s1);
scanf("%s",s2);
printf("%s\n",fun(s1,s2,&n,&m));
fprintf(fp,"%s\n",fun(s1,s2,&n,&m));
printf("%d %d",n,m); // 要打印两个变量,需要两个%d
fprintf(fp,"%d %d",n,m);
fclose(fp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
磨虎cX
2012-09-24 · 超过19用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:43.9万
展开全部
没有申请空间,你定义的 *s1,*s2只是一个指针,该指针没有指向一个已经申请了的合法空间。
所以这样用就是内存错误了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绛喵
2012-09-24 · TA获得超过273个赞
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:125万
展开全部
char *s1,*s2; 要先分配内存,否则报错。

例如char strs1[100]; s1=strs1;
同时,在输入两个字符串的时候,使用空格隔开就好,不要回车。
另外,哥哥,您写的程序太奇葩了。fun函数惨不忍睹
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
veket的小号
2012-09-24 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3991万
展开全部
char *s1,*s2;
请定义为数组!!!
指针不能保存字符串本身,只能保存字符串的首地址

因此 在
scanf("%s",s1);
scanf("%s",s2);时 出错了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuxiaofriend
2012-09-24
知道答主
回答量:57
采纳率:0%
帮助的人:12.2万
展开全部
估计是什么地方超出了存储空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式