c语言文件读取字符串问题 请各位大神看看我的代码哪里有错····· 绝对加分!!!

#include<stdio.h>#include<string.h>char*getmin(){charmin[6],ch,*p;inti=0;FILE*fp;if((... #include <stdio.h>
#include <string.h>

char *getmin()
{ char min[6],ch,*p;
int i=0;
FILE *fp;
if((fp=fopen("min.in","r"))==NULL)
{ printf("error");}
while((ch=fgetc(fp))!=EOF)
{ min[i]=ch;
i++;
}
p=min;
return p;
}
int main()
{
char a[6];

*a=*getmin();
printf("%s",a[6]);
return 0;
}
展开
 我来答
匿名用户
2012-04-09
展开全部
1.
printf("%s",a[6]);
a[6]是字符,而且超出了a的下标范围(0-5).
改成printf("%s", a);

2.
getmin返回的是函数内部的数组。函数返回时不再有效。 应该动态申请内存或者传入一个函数外部有效的数组。

3. *a = *getmin(). 这样只能对a[0]赋值。

需要彻底重写。

错误太多,其它回答也有错误。
为免误导,给你改下吧:

#include <stdio.h>
#include <string.h>

int getmin(char *a, int size)
{ char ch,*p;
int i=0;
FILE *fp;
if((fp=fopen("min.in","r"))==NULL)
{
printf("error");
return 0;
}
while((ch=fgetc(fp))!=EOF)
{
if((i >= size - 1)) {
fprintf(stderr, "error!\n");
return 0;
}
a[i]=ch;
i++;
}
a[i] = '\0';
return i;
}
int main()
{
char a[6];

if(getmin(a, sizeof(a)) > 0){
printf("%s",a);
}
return 0;
}

tanzhangwen的答案是完全错误的。其它函数会覆盖这个函数的栈。
举个例子:
准备一个max.in文件,内容同min.in不同。

在tanzhangwen的代码中多加一个函数getmax.你会发现得到的结果不是min.ini的内容,而是max.ini的内容。原因是tanzhangwen的代码犯了第二个错误,返回栈地址。内容会被其它函数覆盖。
见如下代码:

include <stdio.h>
#include <string.h>
#define N 1000
char *getmax()
{ char min[N],ch,*p;
int i=0;
FILE *fp;
if((fp=fopen("max.in","r"))==NULL)
{ printf("error");}
while(i<N&&(ch=fgetc(fp))!=EOF)
{ min[i]=ch;
i++;
}
min[i]='\0';
p=min;
return p;
}
char *getmin()
{ char min[N],ch,*p;
int i=0;
FILE *fp;
if((fp=fopen("min.in","r"))==NULL)
{ printf("error");}
while(i<N&&(ch=fgetc(fp))!=EOF)
{ min[i]=ch;
i++;
}
min[i]='\0';
p=min;
return p;
}

int main()
{
char *a;
char *b;
a=getmin();
b=getmax();
printf("%s",a);
return 0;
}
tanzhangwen
2012-04-09 · TA获得超过1136个赞
知道小有建树答主
回答量:499
采纳率:0%
帮助的人:845万
展开全部
给你改了下:

指针和数组要对应 getmin返回的是指针 所以定义a也应该为指针
因为数组是要申请空间 指针不要

#include <stdio.h>
#include <string.h>
#define N 1000
char *getmin()
{ char min[N],ch,*p;
int i=0;
FILE *fp;
if((fp=fopen("min.in","r"))==NULL)
{ printf("error");}
while(i<N&&(ch=fgetc(fp))!=EOF)
{ min[i]=ch;
i++;
}
min[i]='\0';
p=min;
return p;
}
int main()
{
char *a;

a=getmin();
printf("%s",a);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zsx10110
2012-04-09 · TA获得超过8872个赞
知道大有可为答主
回答量:2369
采纳率:66%
帮助的人:3068万
展开全部
我没编译你的程序我就说说我觉得的问题
1。你的char a[6]定义的太小了吧 大点
2。字符串拷贝可以用 strcpy(a,getmin);就可以了
如果改了还不行最好说下哪里有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式