fgets的问题

请勿坑爹 请勿坑爹 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先贴一段代码 也是论坛里面的问题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100
int main(void)
{
char buffer[MAXSIZE];
FILE *fin,*fout;
if((fin = fopen("c:\\file.txt","r")) == NULL){
perror("open fin error\n");
exit(1);
}
if((fout = fopen("c:\\out.txt","w+")) == NULL){
perror("creat outfile error!\n");
exit(1);
}
fgets(buffer,MAXSIZE,fin);
// memset(buffer,0,MAXSIZE);
while(fgets(buffer,MAXSIZE,fin) != NULL){
fputs(buffer,fout);
// memset(buffer,0,MAXSIZE);
}
fclose(fin);
fclose(fout);
remove("c:\\file.txt");
rename("c:\\out.txt","c:\\file.txt");
}


代码就是实现删除打开文件的第一行,这个不是重点
对fgets有一点疑惑,请高手解答
1.如果连续对一个文件读取fgets 如:
fgets(buffer1,MAXSIZE,fin);
fgets(buffer2,MAXSIZE,fin);则会读取文件的第一行 和第二行,好像里面设置了一个什么?为什么第二个直接读的就是第二行?
2 也就是我程序里面注释的问题,我调试了 注释掉memset程序照样可以运行。小弟有点想不通,
如果我第一行是 :i love you
第二行是 :you
采用循环while(fgets(buffer,MAXSIZE,fin) != NULL)那么第一次buffer里面是i love you,我没有疑问,第二次为什么不是
you加上后面的ove you? fgets执行前自动先耍行buffer?还是如果从buffer的首地址写入数据 buffer里面的内容就自动刷新了?
求解答!!
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
请勿坑爹
C语言 70,039 成员 243,237 内容