C 逐字符读取文件会导致最后一行截断

C 逐字符读取文件会导致最后一行截断,c,arrays,C,Arrays,我正在创建一个用于练习的简单程序,我想逐字符读取文本文件,并将从文件中读取的每个字符保存在2D字符数组中。例如,如果文本文件包含以下内容: ****** ****** ****** ****** ****** ****** 我需要创建一个6x6char数组来保存文件的内容。这是我读取文件并保存到阵列的代码: // malloc the 2d array here i=0; j=0; clearMap(map,x,y); // set all elements of th

我正在创建一个用于练习的简单程序,我想逐字符读取文本文件,并将从文件中读取的每个字符保存在2D字符数组中。例如,如果文本文件包含以下内容:

******
******
******
******
******
******
我需要创建一个6x6
char
数组来保存文件的内容。这是我读取文件并保存到阵列的代码:

// malloc the 2d array here
    i=0;
    j=0;
    clearMap(map,x,y); // set all elements of the array to 0
    while ((ch=fgetc(fp)) != EOF ) // start reading file here
    {
        if (j == y) // end of line
        {
            j=0;
            i++;
        }
        if (i == x) // end of map
        {
            break;
        }
        map[i][j]=ch; // assign to array
        j++;
    }
    printMap(map,x,y);
当我打印阵列时,最后一行被部分截断,我在控制台上得到以下输出:

******
******
******
******
******
*

有什么建议吗?

请注意,新行也算作
char
(需要并且将被读取),至少在阅读文本文件时是这样。您可能希望阅读以下内容:最后一行短5个字符(前面的行数)。除此之外,代码不完整,但您应该将
ch
定义为
int
type。@WeatherVane感谢您提供有关行数和'\n'数的提示。我发现我的数组确实将换行符存储为数据,因此短了5个字符。编辑:使用换行检查修复了我的问题。感谢alk和天气风向标。感谢@alk提请您注意这个问题。