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; } ``` * 运行结果 * 问题:为什么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; } ``` * 运行结果 * 原理:文件写文后需要关闭文件,然后重新打开文件让文件流指针 指向文件开始位置 方便下一次的文件读操作。 --- <div class="tip inlineBlock success"> 我们如果不想这样开呀关呀的,我们要怎么做呢???这个就涉及到文件的随机读写了。 </div> 版权声明 ▶ 本网站名称:Fivk博客 ▶ 本文链接:https://blog.fivk.cn/archives/206.html ▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。 ▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!! ▶ 站长邮箱 admin@fivk.cn,如不方便留言可邮件联系。 最后修改:2021 年 02 月 21 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏