Erro na saída ao tentar imprimir conteúdo do arquivo.txt

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h>  typedef struct{      char **matriz;  } Dado;   void ler_agumento (Dado *dado, int argc, char **argv){      int opcao;     dado -> matriz = NULL;      while (opcao = getopt (argc,argv, "e::") != -1){          switch (opcao){              case 'e':                 dado->matriz = optarg;                 break;         }     } }  void imprimir (FILE *file){      char *line = (char*) malloc(sizeof(char));      if(file == NULL) {          fprintf(stderr, "Erro ao abrir o arquivo.txt.");     }         while(fgets(line, 80, file) != NULL) {          printf("%s", line);     }      }  int main(int argc, char **argv[]){      int i;     Dado dado;      dado.matriz = malloc(sizeof(char *)*8);          for(i=0; i<8; i++){              dado.matriz[i] = malloc(8);         }      ler_argumento (&dado, argc, argv);      FILE *file = fopen(dado.matriz,"r");      imprimir (file);      fclose (file);      return 0; } 

Quero imprimir o conteúdo que está dentro de um arquivo. Passei como argumento pelo terminal abrindo dessa forma (./executar -e arquivo.txt). A saída que gera é a mensagem de erro do printf mostrando que o arquivo está vazio e em seguida mostra Segmenttion fault. Alguem pode me ajudar?