C – 获取下一个项目

(我只是被授权使用:malloc,免费,阅读)
我正在尝试使用任何BUF_SIZE获取文件中的下一行但是它返回了错误的值。 (42school / Epitech的get_next_line项目)
所以,返回(错误值,缺少第一个字符)值:

3 1 - #include  1 - dlib.h> 1 - clude "libft/libft.h" 1 - BUFF_SIZE 32 

我的源代码:

 #include  #include  #include  #include "libft/libft.h" # define BUFF_SIZE 32 int get_next_line(int const fd, char **line) { char buffer[BUFF_SIZE + 1]; size_t i; size_t size; if (!(*line = malloc(BUFF_SIZE))) return (-1); *line[0] = '\0'; while (read(fd, buffer, BUFF_SIZE) > 0) { buffer[BUFF_SIZE + 1] = '\0'; if (buffer[0] == '\n') return (1); if (ft_strchr(buffer, '\n') != NULL) { i = 0; size = ft_strlen(*line); buffer[BUFF_SIZE + 1] = '\0'; while (buffer[i] != '\0') { if (buffer[i] == '\n') { if (!(*line = realloc(*line, i + size))) return (-1); buffer[i] = '\0'; ft_strncat(*line, buffer, i); return (1); } i++; } } if (!(*line = realloc(*line, BUFF_SIZE))) return (-1); ft_strncat(*line, buffer, BUFF_SIZE); } return (0); } 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); } 

为什么它没有正确地返回前四行?

因为read只读取你告诉它的字节数(或者仍然可以读取的数字,以较小者为准),你的策略是重复从文件中读取到缓冲区并将字符从缓冲区复制到行中(在每次读取时重新分配该行,直到遇到新行。

在您的解决方案中,您将测试缓冲区是否包含换行符,如果是,则处理缓冲区 – 但前几次读取可能不包含换行符。 这就是为什么我说“反复”。

我希望这有助于你的家庭(我不会为你写解决方案)。

注意:看看如何终止缓冲区。 它有一个bug。