Инициализируйте ваш массив до 0 и используйте тот факт, что вы выбираете, сколько байтов вы читаете, используя fgets.Просто проверьте возвращаемое значение fgets, чтобы убедиться, что вы достигли конца файла.
Также обратите внимание, что вам не нужно иметь массив результатов в качестве указателя, поскольку массив уже является указателем (РЕДАКТИРОВАТЬ до зеркала @ user3629249 предложения) РЕДАКТИРОВАТЬ 2: отредактированный код для учета проблемы новой строки.Alo удалил -1, что вызывало 79 строк символов вместо 80
#include <stdio.h>
#include <string.h>
#define MAX_LINES 8000
#define HSIZE 81
int parse_file( FILE * inp_file, char res[MAX_LINES][HSIZE])
{
int l = 0;
int len = HSIZE;
while( fgets( res[l]+(HSIZE-len), len, inp_file ))
{
len = HSIZE - strlen( res[l]);
if( len <= 1)
{
l++;
len = HSIZE;
}
}
}
int main()
{
char parsed_file[MAX_LINES][HSIZE] = {0};
FILE * inp_file;
inp_file = fopen( "file_to_parse.txt", "r");
if( inp_file == NULL)
{
printf( "Failed to read input file...\n");
return 1;
}
parse_file( inp_file, parsed_file);
fclose( inp_file);
for( int i=0; parsed_file[i][0] != 0; i++)
printf( "line %04d: %s\n", i+1,parsed_file[i]);
return 0;
}
Если вы хотите, вы также можете заменить новую строку в вашем parsed_file чем-то вроде этого
char *pos;
while( (pos = strchr( line, '\n'))
*pos = ' ';
С тестовым файлом:
This is a random file that I'm testing out for the pure randomness of random files.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest thing happened, let me tell you about it....
и выводом
line 0001: This is a random file that I'm testing out for the pure randomness of random fil
line 0002: es.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest
line 0003: thing happened, let me tell you about it....
Следите за тем, чтобы printf все равно печатал символ новой строки