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;
} 展开
#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;
}
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;
}
展开全部
给你改了下:
指针和数组要对应 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;
}
指针和数组要对应 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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我没编译你的程序我就说说我觉得的问题
1。你的char a[6]定义的太小了吧 大点
2。字符串拷贝可以用 strcpy(a,getmin);就可以了
如果改了还不行最好说下哪里有问题
1。你的char a[6]定义的太小了吧 大点
2。字符串拷贝可以用 strcpy(a,getmin);就可以了
如果改了还不行最好说下哪里有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询