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);
}
展开
 我来答
eiilpux17
2012-09-24 · TA获得超过802个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:402万
展开全部
第一:定义char类型的指针相当于定义了一个数组,但是该数组没有给定空间大小,你输了多少它存多少,计算机不知道什么时候这个字符串结束,这种情况下计算机不会默认后面加'\0'的,而且也不好自己添加结束符'\0';
第二:一般情况下c语言中尽量不要用到这样的方法,因为数组和指针相通,用数组申请一定的空间。很方便,很容易更改字符串;
第三:非要用这种方法就只能是定义完指针就申请需要的空间,相当于数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gelandiyajim
2012-09-24 · 超过17用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:50.3万
展开全部
你可以考虑给n,m赋个初值试试看,可能是野指针的问题,指向地址乱了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月半呼
2012-09-24 · TA获得超过299个赞
知道答主
回答量:11
采纳率:0%
帮助的人:13万
展开全部
你的指针没有初始化,没有分配内存空间给它,所以在执行语句scanf("%s",s1)时,编译器找不到s1指向的地址,所以报错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式