Loading... * 我们开始学文件读写时可能会遇到一些问题。 * 我们来看一看这个代码 ```C #include<stdio.h> int main(int argc, char* argv[]) { char buf[128] = ""; FILE* fp = NULL; fp = fopen("e.txt", "w+"); if (fp == NULL) { perror("fopen"); return 0; } //先往、文件中写入一个字符串"hello Fivk" fputs("hello Fivk", fp); //在从文件中读取 该字符串 fgets(buf, sizeof(buf), fp); printf("buf = %s", buf); fclose(fp); return 0; } ``` * 运行结果![](https://blog.fivk.cn/usr/uploads/2021/02/278231536.png) * 问题:为什么e.txt里面有“屯”???,输出的时候为什么打印出来的没有hello fivk,只有“屯”??? <iframe class="iframe_video" src="//player.bilibili.com/player.html?aid=372528286&bvid=BV1XZ4y1G7No&cid=249275227&page=73" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe> * 忘了就看看视频第32分钟 * 所以不要写完就读 说明:当我们输入“hello Fivk”时,文件流指针就指到了这个字符串后面,所以后面的fgets是从后面开始输入的。至于后面的“屯”是程序预留的空间,我们可以重新打开文件,让文件的流指针回到文件首部。 --- * 解决方法: ```C #include<stdio.h> int main(int argc, char* argv[]) { char buf[128] = ""; FILE* fp = NULL; fp = fopen("e.txt", "w+"); if (fp == NULL) { perror("fopen"); return 0; } //先往、文件中写入一个字符串"hello Fivk" fputs("hello Fivk", fp); //重新打开前要先关闭,不允许重复打开 fclose(fp); //重新打开文件 让文件的流指针 回到文件首部 fp = fopen("e.txt", "r"); //在从文件中读取 该字符串 fgets(buf, sizeof(buf), fp); printf("buf = %s", buf); fclose(fp); return 0; } ``` * 运行结果![](https://blog.fivk.cn/usr/uploads/2021/02/2031667441.png) * 原理:文件写文后需要关闭文件,然后重新打开文件让文件流指针 指向文件开始位置 方便下一次的文件读操作。 --- <div class="tip inlineBlock success"> 我们如果不想这样开呀关呀的,我们要怎么做呢???这个就涉及到文件的随机读写了。 </div> 最后修改:2021 年 02 月 21 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏