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