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个回答
展开全部
已改,看注释
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有申请空间,你定义的 *s1,*s2只是一个指针,该指针没有指向一个已经申请了的合法空间。
所以这样用就是内存错误了
所以这样用就是内存错误了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char *s1,*s2; 要先分配内存,否则报错。
例如char strs1[100]; s1=strs1;
同时,在输入两个字符串的时候,使用空格隔开就好,不要回车。
另外,哥哥,您写的程序太奇葩了。fun函数惨不忍睹
例如char strs1[100]; s1=strs1;
同时,在输入两个字符串的时候,使用空格隔开就好,不要回车。
另外,哥哥,您写的程序太奇葩了。fun函数惨不忍睹
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char *s1,*s2;
请定义为数组!!!
指针不能保存字符串本身,只能保存字符串的首地址
因此 在
scanf("%s",s1);
scanf("%s",s2);时 出错了
请定义为数组!!!
指针不能保存字符串本身,只能保存字符串的首地址
因此 在
scanf("%s",s1);
scanf("%s",s2);时 出错了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计是什么地方超出了存储空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询