实际上并没有正确把文件中的内容读取到缓冲区中.
首先看你的text声明
char text[]="";
// 实际上这是你只是声明了一个仅包含一个'\0'元素的数组, 注意! C中的数组是不可以自己增长的.
// 这就是你的主要问题所在
char text[] = { '\0' }; // 这个是你声明的另一种写法.
至于你为啥运行没报错呢.看你的while循环
fscanf(fp,"%c",&text);
// 从 fp 文件指针中读取一个字符到 text 中
// 这个语句其实可以拆开为
//
// char buffer;
// fscanf(fp, "%c", &buffer);
//
// 所以你只是单纯把读取的这个字符替换掉了原本的 \0 空字符
test++;
// 这是个计数器吧?不知道是不是你写错了,还是我猜测那样.
printf("%s",text);
// 注意这里
// 你使用 %s 这个格式说明符输出 text 这个字符串.
// 众所周知, 一个字符串是以 \0 作为结束的标志的. 但是你声明的缓冲区只有一个位置,还被读取的字符占住了
// 而 text 是存放在 栈 上面的(至于为啥, 貌似超纲了). 所以 printf 会从 text 的位置开始向后查找
// 直到遇到第一个 \0 字符为止, 或者访问错误出现.
// 而栈的实现依赖于系统实现. 比如 windows 就是直接向后退 0xCC 个字节,并初始化为 0xCCCCCCCC.
// 所以实际上, 如果你的操作系统栈的实现是初始化为 0x00000000 的话, 那就不会出错了.
// 因为你的 text 后一个字节就是 \0 字符. 如果在 Windows 上应该会输出一堆的 烫烫烫 (不知道你懂这个梗不 :) )
至于之后的 strlen 的输出也可以同理推导.