如何解决在 fflush() 之后没有从 fgets() 获得预期的输出
这是 fflush() 之后的简单代码,我们没有得到预期的输出。 我们期待“Hello World file2”,但它显示了一些如下所述的随机垃圾值。
#include <stdio.h>
int main(void) {
char output_reg[300],errstr[300];
FILE *fd1,*fd2,*fd3,*fd4;
char *retno,*retseek;
int len;
fd4 = fopen("out2.log","w");
fd3 = fopen("out2.log","r");
fputs("Hello World file2!\n",fd4);
fgets(output_reg,30,fd3);
printf("FILE 2 b4 = output_reg : %s\n",output_reg);
fflush(fd4);
fgets(output_reg,fd3);
printf("FILE 2 af = output_reg : %s\n",output_reg);
}
$(function(){
$(".info").click(function(){
var left = $("img",this).offset().left + ($("img",this).width()/2) - ($(".tip",this).width()/2);
$(".tip",this).toggle().css({"left":left});
});
});
解决方法
在 fputs("Hello World file2!\n",fd4);
之后,没有任何内容写入文件,但仅写入内部缓冲区。因此 out2.log
文件仍然是空的。
fgets(output_reg,30,fd3)
然后尝试从失败的空文件中读取,但您没有检查。然后你无论如何都要打印 output_reg
的内容,因此是垃圾。
然后您调用 fflush(fd4)
,它实际上写入文件,因此第二个 fgets
工作正常。
把你的代码改成这个,看看会发生什么。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char output_reg[300] = "mygarbage",errstr[300];
FILE* fd1,* fd2,* fd3,* fd4;
char* retno,* retseek;
int len;
fd4 = fopen("out2.log","w");
if (fd4 == NULL)
{
printf("fopen(\"out2.log\",\"w\") failed.");
exit(1);
}
fd3 = fopen("out2.log","r");
if (fd3 == NULL)
{
printf("fopen(\"out2.log\",\"r\") failed.");
exit(1);
}
fputs("Hello World file2!\n",fd4);
if (fgets(output_reg,fd3) == NULL)
printf("fgets returned NULL,feof is %d\n",feof(fd3));
else
printf("FILE 2 b4 = output_reg : %s\n",output_reg);
fflush(fd4);
if (fgets(output_reg,feof(fd3));
else
printf("FILE 2 af = output_reg : %s\n",output_reg);
}
您会看到第一个 fgets
返回 NULL,这会将 文件结束 标志设置为 1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。