69,371
社区成员
发帖
与我相关
我的任务
分享
#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,也就是多次读入,一次性输出。为什么出错呢?
#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;
}
#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);
}
#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;
}