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