Ошибка сегментации в последней строке при чтении файла - PullRequest
1 голос
/ 02 марта 2020

У меня ошибка сегментации при чтении файла. В конце файла есть пустая строка. Я подумал, что когда я сделал fscanf (input, "[^ \ n] \ n", c), он перенес бы вкладку следующей строки из второй последней строки, и токен перешел на пустую строку в конце, которая будет быть '\ 0', но я получил ошибку сегментации.

  FILE *input = fopen( filename, "r" );
  if ( input == NULL ) {
    fprintf( stderr, "Can't open file: %s\n", filename );
    exit( EXIT_FAILURE );
  }

  file = ( char ** )malloc( MAX_LINE * sizeof( char * ) );
  int index = 0;
  char *c = ( char * )malloc( MAX_CHAR * sizeof( char ) );
  int length = 0;

  while ( fscanf( input, "%[^\n]\n", c ) != EOF ) {
    if ( c == NULL ) {
      fprintf( stderr, "Cannot read line: %d ", index );
      exit( EXIT_FAILURE );
    }

    length = ( int ) strlen( c );

    // checking if a line has too many characters
    if ( length > MAX_CHAR ) {
      fprintf( stderr, "Line too long: %s:%d\n", filename, ( index + 1 ) );
      exit( EXIT_FAILURE );
    }

    //checking if the file has too many lines
    if ( index > MAX_LINE ) {
      fprintf( stderr, "Too many lines: %s\n", filename );
      exit( EXIT_FAILURE );
    }

    //printf( "%s\n%d %d\n", c, index, length );

    file[ index ] = ( char * )malloc( MAX_CHAR * sizeof( char ) );
    file[ index ] = c;
    index++;
  }
...