字符串进入循环输出的值就带乱码

做数据结构实验时有一块文件操作要插入新的数据到txt文件,但是发生了诡异的事情,原本正常的字符串插入进去后出现了乱码,
就单独拉出来用printf打印一下字符串,诡异的是只要不进循环字符串就没问题,进了循环就会出现乱码,这究竟是什么问题?

#include<stdio.h>
#include<string.h>
int main()
{
    int line = 11;
    FILE* fp = NULL;
    fp = fopen("./EX5.txt", "r");
    char buff[20][255];
    /*fscanf(fp, "%s", buff);
    printf("%s\n", buff);*/
    fclose(fp);
    fp = fopen("./EX5.txt", "r");
    char buf1[255] = "2021010902025  zhengxiongren" ;
    for (int i = 0; i < 10; i++)
    {
        fgets(buff[i], 255, fp);
    }
    fclose(fp);
    strcpy(buff[line], buf1);
    printf("%s\n", buff[line]);
    for (int i = 0; i < line; i++) {
        printf("%s\n", buff[i]);
    }
    
    
    printf("%s\n", buff[line]);
    fp = fopen("./EX5.txt", "w");
    for (int i = 0; i < line; i++)
    {
        fputs(buff[i], fp);
    }
    
/*    while (i < line)
    {
        fputs(buff[i], fp);
        i++;
    }*/

    /*fputs(buff[line], fp);*/
    fclose(fp);
    return 0;
}

img

包括把数据写入txt文件,只要单独插入,就不会有乱码,但只要一循环就会有,把for循环换成while也一样