c语言文件读取问题

perrycoy 2009-10-12 11:41:26
#include<stdio.h>
#include<string.h>
void main()
{
FILE *fp;
char *cha,chb[512];
char name[20];
cha=NULL;
printf("enter the file name please!\n");
scanf("%s",name);
if ((fp=fopen(name,"r"))==NULL)
{printf("can not open file!\n");}
if(!feof)
{
fgets(chb,512,fp);
strcat(cha,chb); //当然我知道可以不用接cha到后面直接在循环中输出chb,但是为什么这样就不行吗?
}

printf("a=%s\n",*cha);
}
我的思想是设定chb【512】做缓冲,然后一个一个练到cha后面,cha一开始是空字符,最后输出cha,也就是多次读入,一次性输出。为什么出错呢?
...全文
657 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-10-12
  • 打赏
  • 举报
回复

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

int main()
{
FILE *fp;
char chb[512]={0};
char name[20];
char *cha=(char*)malloc(1024);
memset(cha,0,1024);//缓冲区清0
printf("enter the file name please!\n");
scanf("%s",name);
if ((fp=fopen(name,"wb+"))==NULL)//读写方式打开一个二进制文件..
{
printf("can not open file!\n");
}
else
{
fwrite(name,strlen(name),1,fp);//往name文件写文件名
fseek(fp,0,SEEK_SET);//设置文件读取位置
fgets(chb,strlen(name)+1,fp);//从name文件读取输入内容
strcat(cha,chb); //复制到cha结尾
}
printf("a=%s\n",cha);//显示读取内容
fclose(fp);//释放文件资源
free(cha);//释放内存
return 0;
}
小魔菇 2009-10-12
  • 打赏
  • 举报
回复
char cha[1]
长度又变成1了
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
char cha[1],chb[512];
char name[20];

printf("enter the file name please!\n");
scanf("%s",name);
if ((fp=fopen(name,"r"))==NULL)
{printf("can not open file!\n"); exit(0);}
if(!feof(fp))
{
fgets(chb,512,fp);
strcat(cha,chb);
}

printf("a=%s\n",cha);
}改成这样还不行而且这样跟我原来想法还不一样,我想源文件不变的输出也就是最好cha为空
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sun_blackh 的回复:]
好像有两个地方有问题

非关键问题 if(!feof)  应该是 !feof(fp) 

关键问题  printf("a=%s\n",*cha);  应该是 printf("a=%s\n",cha);


[/Quote]

按你的改了 能显示一部分,但为什么还是会提示应用程序错误
jenglev 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sun_blackh 的回复:]
好像有两个地方有问题

非关键问题 if(!feof)  应该是 !feof(fp) 

关键问题  printf("a=%s\n",*cha);  应该是 printf("a=%s\n",cha);


[/Quote]
有道理
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
在输出printf("a=%s\n",*cha);
之前加strcat(cha,'\0');
怎么还不行,怎么改才能实现我的想法?
快乐老头儿 2009-10-12
  • 打赏
  • 举报
回复
好像有两个地方有问题

非关键问题 if(!feof) 应该是 !feof(fp)

关键问题 printf("a=%s\n",*cha); 应该是 printf("a=%s\n",cha);

louyong0571 2009-10-12
  • 打赏
  • 举报
回复
printf("a=%s\n",*cha);
这行有问题 printf("a=%s\n",cha);
而且cha字符串可能会结束不了。
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
文件是事先就有的
连个程序编译,链接,均无误,
运行时就不行出错:应用程序错误:“0x00404343”指令引用的“0xffffffcc”内存。该内存不能为“read”。


若文件不错在则能运行提示:could not open file!
louyong0571 2009-10-12
  • 打赏
  • 举报
回复
楼上不要激动嘛,大家探讨问题,何必呢
「已注销」 2009-10-12
  • 打赏
  • 举报
回复
蠢货才会去自己创建文件
louyong0571 2009-10-12
  • 打赏
  • 举报
回复
人家的文件可能早就存在呢?!
「已注销」 2009-10-12
  • 打赏
  • 举报
回复
同志 你的文件里边没有内容 读的东西是空的
输入文件名后你应该在往文件里写内容才能读
if ((fp=fopen(name,"r"))==NULL)
"r是读" 不会帮你创建文件 用"w+"
louyong0571 2009-10-12
  • 打赏
  • 举报
回复
什么错误,详细说下
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 louyong0571 的回复:]
正如楼上所说,没有确保空间的指针肯定是不能操作的。
[/Quote]
那我改成
#include<stdio.h>
#include<string.h>
void main()
{
FILE *fp;
char cha[1000000],chb[512];
char name[20];

printf("enter the file name please!\n");
scanf("%s",name);
if ((fp=fopen(name,"r"))==NULL)
{printf("can not open file!\n");}
if(!feof)
{
fgets(chb,512,fp);
strcat(cha,chb);
}

printf("a=%s\n",*cha);
}


怎么还不行?
louyong0571 2009-10-12
  • 打赏
  • 举报
回复
正如楼上所说,没有确保空间的指针肯定是不能操作的。
cookjiang 2009-10-12
  • 打赏
  • 举报
回复
cha指针是空,没有内存空间,肯定完蛋啊。strcat是不会帮你开内存空间的,C语言的内存分配是程序员的事。
快乐老头儿 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 perrycoy 的回复:]
引用 11 楼 sun_blackh 的回复:
好像有两个地方有问题

非关键问题 if(!feof)  应该是 !feof(fp) 

关键问题  printf("a=%s\n",*cha);  应该是 printf("a=%s\n",cha);

按你的改了 能显示一部分,但为什么还是会提示应用程序错误
[/Quote]

服了你了,到底提示了什么错误,说啊。
「已注销」 2009-10-12
  • 打赏
  • 举报
回复

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

int main()
{
FILE *fp;
char chb[512]={0};
char name[20];
char *cha=(char*)malloc(1024);
int Offset=0,currentlen=1024;
memset(cha,'\0',1024);//»º³åÇøÇå0
printf("enter the file name please!\n");
scanf("%s",name);
if ((fp=fopen(name,"r"))==NULL)//¶Áд·½Ê½´ò¿ªÒ»¸ö¶þ½øÖÆÎļþ..
{
printf("can not open file!\n");
}
else
{
while(!feof(fp))
{
fgets(chb,512,fp);//´ÓnameÎļþ¶ÁÈ¡ÊäÈëÄÚÈÝ
strcat(cha,chb); //¸´ÖƵ½cha½áβ
Offset+=512;
currentlen-=512;
if(currentlen<512)//动态内存分配..
{
char *pStr=(char*)malloc(Offset);
strcpy(pStr,cha);
cha=(char*)malloc(currentlen=Offset<<1);
memset(cha,'\0',currentlen);
strcpy(cha,pStr);
currentlen-=Offset;
}
}
}
printf(cha);//ÏÔʾ¶ÁÈ¡ÄÚÈÝ
printf("\n");
fclose(fp);//ÊÍ·ÅÎļþ×ÊÔ´
free(cha);//ÊÍ·ÅÄÚ´æ
return 0;
}
perrycoy 2009-10-12
  • 打赏
  • 举报
回复
谢谢各位大侠
加载更多回复(15)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧