1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
   | char *get_next_line (FILE *stream, char **pp_line);
int readVote(char * filename);
 
/* lecture d'un fichier filename */
int readVote(char * filename){
  FILE* fileID;
 
   /* ouverture du fichier .vote */
  if ((fileID = fopen(filename,"r")) == NULL) {
    fprintf(stderr,"Error: cannot open the file ""%s"" in flux mode \n",filename);
  }
 
  /* lecture ligne par ligne */
  char ** pp_line;
  char * test2 = get_next_line(fileID,pp_line);
  while (test2!=NULL){
    printf(" %s \n",test2);
    test2 = get_next_line(fileID,pp_line);
  }
 
}
 
/* lecture d'une ligne. Le pointeur passé en argument pointe alors vers l'adresse de
la ligne stockée en mémoire */
char *get_next_line (FILE *stream, char **pp_line){
  if (stream != NULL && pp_line != NULL){
    void *line = NULL;
    char tmp[BUFSIZ] = "";
    size_t size = 1;
 
    *pp_line = NULL;
    while (fgets (tmp, BUFSIZ, stream) != NULL){
      size += BUFSIZ; //Incremente size de BUFSIZ
      line = realloc (*pp_line, sizeof (**pp_line) * size);
      if (line != NULL){
        if (*pp_line == NULL){
          ((char *)line)[0] = '\0';
        }
        *pp_line = line;
        line = NULL;
        strcat (*pp_line, tmp);
        if ((*pp_line)[strlen (*pp_line)-1] == '\n'){
          (*pp_line)[strlen (*pp_line)-1] = '\0';
          break;
        }
      }else{
        free (*pp_line), *pp_line = NULL;
      }
    }
  }
  return *pp_line;
} | 
Partager