首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于fgets解决方案

2012-04-20 
关于fgets代码如下:#includestdio.h#includestdlib.hint main(void){FILE*fp1,*fp2char file1[100],f

关于fgets
代码如下:

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

int main(void)
{
FILE*fp1,*fp2;
char file1[100],file2[100];
char buffer[1];


printf("the name of original file:");
scanf("%s",file1);

printf("the name of the copy file:");
scanf("%s",file2);

if((fp1=fopen(file1,"r"))==NULL)
{
fprintf(stderr,"the orifinal file %s is not here!",file1);
exit(1);

}
if((fp2=fopen(file2,"w"))==NULL)
{

fprintf(stderr,"the orifinal file %s is not here!",file2);
exit(1);

}


while(fgets(buffer,2,fp1)!=NULL)
fputs(buffer,fp2);


fclose(fp1);
fclose(fp2);
}

目录下有一个txt文件,内容为如下:
you yi ge gu niang!!

ta hen xiaozhang !!

djflskjdflsdfslkdjf

sdfsdf

问题是:为什么颜色部分语句中,buffer后的数字,只要是1以上,整个编译过程都不会出错呢?2,在声明变量buffer数组的时候,buffer【】中的数字无论是什么,只要不是0,都不会出现任何错误,这是为什么呢。在声明buffer的时候,为什么不能char*buffer呢。fget()的原理是什么?跪求解答。。跪求详尽解答。。愿意给满分,加分都行。




[解决办法]

C/C++ code
char *fgets( char *string,int n,//从流中读取n-1个字符,除非读完一行FILE *stream );
[解决办法]
char*buffer=new char[n];要申请空间,
[解决办法]
那个2是你每次读出的字节数,不能大于你定义的数组的大小。
[解决办法]
对于fgets,当它读取文件内容时,是根据第2个参数的值来读取的,如第二个参数为n,则读取n-1的内容,读完后在后面补一个表示结尾的null字符。
所以,当你定义数组长度为1时,由于1-1=0,所以fgets的返回值会一直不为NULL,while循环就结束不了

热点排行