C 同时读取和写入文件时出现问题
我正在尝试用C同时读取和写入文件。我可以写入文件,但无法读取文件。有什么建议吗C 同时读取和写入文件时出现问题,c,file-handling,C,File Handling,我正在尝试用C同时读取和写入文件。我可以写入文件,但无法读取文件。有什么建议吗 #include <stdio.h> int main() { char *str = "C programming language"; char str1[100]; FILE *fptr = fopen("Output.txt", "r+"); if (fptr == NULL) printf("Could not open file!");
#include <stdio.h>
int main()
{
char *str = "C programming language";
char str1[100];
FILE *fptr = fopen("Output.txt", "r+");
if (fptr == NULL)
printf("Could not open file!");
fputs(str, fptr);
fgets(str1,100,fptr);
fclose(fptr);
printf("%s", str1);
return 0;
}
#包括
int main()
{
char*str=“C编程语言”;
char-str1[100];
文件*fptr=fopen(“Output.txt”、“r+”);
如果(fptr==NULL)
printf(“无法打开文件!”);
fputs(str,fptr);
fgets(STR1100,fptr);
fclose(fptr);
printf(“%s”,str1);
返回0;
}
请假定我的计算机上已经存在output.txt文件。引用:
对于打开以进行更新的文件(包含“+”号的文件),其中
允许输入和输出操作,流应为
冲洗(fflush)或重新定位(fseek、fsetpos、REFLIND)在
在写入操作之后的读取操作。这条小河
在写入操作之前重新定位(fseek、fsetpos、倒带)
在读取操作之后(当该操作未执行时)
到达文件末尾)
完成写操作后,应该查找文件的开头。对于该调用rewind() 以下是更正后的代码:
#include <stdio.h>
int main()
{
char *str = "C programming language";
char str1[100];
FILE *fptr = fopen("Output.txt", "r+");
if (fptr == NULL)
printf("Could not open file!");
fputs(str, fptr);
rewind(fptr); // seek to beginning
fgets(str1,100,fptr);
fclose(fptr);
printf("%s", str1);
return 0;
}
#包括
int main()
{
char*str=“C编程语言”;
char-str1[100];
文件*fptr=fopen(“Output.txt”、“r+”);
如果(fptr==NULL)
printf(“无法打开文件!”);
fputs(str,fptr);
倒带(fptr);//寻找开始
fgets(STR1100,fptr);
fclose(fptr);
printf(“%s”,str1);
返回0;
}
您需要将偏移量重新定位到开始读取该字符串的位置
写入后,指针位于超出所写入字符串的偏移量处
#include <stdio.h>
int main()
{
char *str = "C programming language";
char str1[100];
FILE *fptr = fopen("Output.txt", "r+");
if (fptr == NULL)
printf("Could not open file!");
fputs(str, fptr);
fseek(fptr, 0, SEEK_SET); // add this
fgets(str1,100,fptr);
fclose(fptr);
printf("%s", str1);
return 0;
}
./main.out
C programming language
#包括
int main()
{
char*str=“C编程语言”;
char-str1[100];
文件*fptr=fopen(“Output.txt”、“r+”);
如果(fptr==NULL)
printf(“无法打开文件!”);
fputs(str,fptr);
fseek(fptr,0,SEEK_SET);//添加此
fgets(STR1100,fptr);
fclose(fptr);
printf(“%s”,str1);
返回0;
}
/main.out
C程序设计语言
一般来说,麻烦比它值得的多。考虑一下,如果你真的想使用一个文件来使用你应该使用的内存。代码需要在<代码>写()/<代码>和<代码>读()/代码>之间的文件描述符上调用<代码> f>代码>,因此该文件将是“更新的”关于:<代码> PrimTf(“不能打开文件!”);代码>1)错误消息应输出到stderr
,而不是stdout
2)还应输出到stderr
系统认为发生错误的文本原因。3) 函数:perror()
正确处理#1和#2。4) 文件未打开,因此不能像文件已打开一样继续执行代码。应调用exit(exit_失败)代码>关于:fgets(str1100,fptr)
应始终检查返回值,如果为NULL,则操作失败。因此,不应该继续执行代码,就好像对fgets()
的调用成功了:fputs(str,fptr);fgets(STR1100,fptr)
调用fputs()
后,“文件指针”将超过包含刚写入数据的位置。因此需要使用fseek()
将“文件指针”移回刚刚写入的数据的开头。