你如果把 fputs 和 fprintf 都注释掉的话printf 输出嘚应该就是 m 原有的"hello\0"。你说的“正常输出”指的是这个吗
我觉得你这个代码想达到的结果是 printf 输出 y,是吗 (我下面会解释的)
先说下,你茬 fopen 中用的打开模式是 r+那么若文件不存在则会错误。所以你实验的时候目录中肯定存在 student.txt 啦! 这个文件中原本有内容吗
如果你想在不存在 student.txt 嘚情况下也能自动创建它的话,打开模式要用 w+
这种带 + 的模式允许你把这个文件用于读或写。但是如果你写入了文件就不能直接马上不能读取文件文件!要先调用 fflush(fp)。你可以认为你写入的内容都在“缓冲区”中fflush 会确保把缓冲区中的内容都真正写入文件,后续才能正确地将其读出来
你可以把 fflush 加在 fprintf 和 fgets 之间。 不过! 这样最后的 printf 会打印出 m 中原本的 hello 也就是前面的 fgets 并没有向 m 中写入任何内容! 这是因为在写入文件后,文件读写位置标记在末尾所以 fgets 没有读到任何内容。
如果你打算让 fgets 从文件开头不能读取文件的话应该在之前调用其他设置位置的函数,如 rewind(fp) 这样 fgets 就会在 m 中就被覆盖上字符 y 和 \0,最终 printf 会打印出 y