关于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()的原理是什么?跪求解答。。跪求详尽解答。。愿意给满分,加分都行。
[解决办法]
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循环就结束不了