Ane*_*gra 6 c fopen file-handling
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "ff.txt"
int main() {
char x[10],y[10];
FILE *fp;
fp = fopen(FILE_NAME, "r+");
if (fp == NULL) {
printf("couldn't find %s\n ",FILE_NAME);
exit(EXIT_FAILURE);
}
fprintf(fp,"Hello2 World\n");
fflush(fp);
fscanf(fp,"%s %s",x,y);
printf("%s %s",x,y);
fclose(fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我想要做的简化版本.此代码不会在控制台中打印任何内容.如果我删除了fprintf调用,它会打印文件中的前两个字符串,对我而言Hello2 World.为什么会这样?即使在我fflush的fp?
之后fprintf(),文件指针指向文件的末尾.您可以使用fseek()在文件开头设置filepointer:
fprintf(fp,"Hello2 World\n");
fflush(fp);
fseek(fp, 0, SEEK_SET);
fscanf(fp,"%s %s",x,y);
Run Code Online (Sandbox Code Playgroud)
或者甚至更好的@Peter建议,使用rewind():
rewind(fp);
Run Code Online (Sandbox Code Playgroud)
rewind:成功调用此函数后,将清除与该流关联的文件结束和错误内部指示符,并删除此流上先前调用ungetc的所有效果.
在打开以进行更新(读取+写入)的流上,对重绕的调用允许在读取和写入之间切换.
最好还是检查返回码fscanf().
为避免缓冲区溢出,您可以使用:
fscanf(fp,"%9s %9s",x,y);
Run Code Online (Sandbox Code Playgroud)