Hello ! Voilà, je me retrouve avec quelque difficulté en voulant lire ligne par ligne un fichier avec n'importe quelle taille (la valeur de BUFF_SIZE) Donc voici ce que cela me retourne:
1 2 3 4 5 6 7 8 | 3 1 - #include <stdio.h> # 1 - include <stdlib.h> # 1 - include <fcntl.h> #i 1 - nclude "libft/libft.h" |
Donc voilà, ils manquent des caractères à chaque ligne récupérée, pourquoi ? Voici mon code source:
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 53 54 55 56 57 | #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include "libft/libft.h" # define BUFF_SIZE 3 int get_next_line(int const fd, char **line) { static char *buffer; char *tmp; int ret; char *endl; if (!buffer && !(buffer = ft_memalloc(BUFF_SIZE + 1))) return (-1); tmp = ft_strnew(0); endl = ft_strchr(buffer, '\n'); while (endl == NULL) { if ((ret = read(fd, buffer, BUFF_SIZE)) > 0) { buffer[ret] = '\0'; endl = ft_strchr(buffer, '\n'); tmp = ft_strjoin(tmp, buffer); } else if (ret < 0) return (-1); else if (ret == 0) { if ((endl = ft_strchr(buffer, '\0')) == buffer) return (0); } } *line = ft_strdup(tmp); ft_memmove(buffer, endl + 1, ft_strlen(endl + 1) + 1); return (1); } int main(void) { int fd; int ret; char *line; if ((fd = open("main.c", O_RDONLY)) < 3 && fd != 0) return (-1); printf("%d\n", fd); ret = get_next_line(fd, &line); printf("%d - %s\n", ret, line); ret = get_next_line(fd, &line); printf("%d - %s\n", ret, line); ret = get_next_line(fd, &line); printf("%d - %s\n", ret, line); ret = get_next_line(fd, &line); printf("%d - %s\n", ret, line); return (0); } |
Merci d'avance de votre aide ! : )
+0
-0