Home > Software engineering >  Open file is not read the text, Get_Next_Line.c
Open file is not read the text, Get_Next_Line.c

Time:12-18

hello guys a just need help on this, not showing the text I wrote: This program open the file and just show on command what is inside, if buffer is > 0 show all the text contained in file.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>

char *ft_strncat(char *dst, const char *src, size_t n)
{
if (n != 0) {
    char *d = dst;
    const char *s = src;
    while (*d != 0)
        d  ;
    do {
        if ((*d = *s  ) == 0)
            break;
        d  ;
    } while (--n != 0);
    *d = 0;
}
return (dst);
}


char *get_next_line(int fd)
{
    char buffer[2] = "";
    char **line;

    if( !*line )
        *line = malloc(100 * sizeof(char));

    *line[0] = '\0';

    while( read(fd, buffer, 1) > 0 ) {
        ft_strncat(*line, buffer, 1);
        if( buffer[0] == '\n' )
            break;
    }
    return (0);
}


int main(void)
{
    int     fd;
    int     ret;

    fd = open("ola.txt", O_RDONLY);

    if (fd < 3 && fd != 0)
        return (-1);

    printf("%d\n", fd);
    printf("%s\n", get_next_line(fd));
    return (0);
}

im trying to see the error but I cant, im a noob on C yet thank you for help me.

CodePudding user response:

line should be char *, not char **. That would only be needed if it were a function parameter that should be updated by the function.

You need to return line from the function, not 0.

You should use realloc() to grow line if the input line is longer than the size of line. Use a variable capacity to hold the current size.

There's no good reason to use ft_strncat(). Use another variable to hold the current position in line, and write the character there directly.

char *get_next_line(int fd)
{
    char buffer;
    size_t capacity = 100;
    char *line = malloc(capacity * sizeof(char));
    size_t pos = 0;

    *line[0] = '\0';

    while( read(fd, &buffer, 1) > 0 ) {
        if (pos > capacity - 2) {
            capacity  = 100;
            line = realloc(line, capacity);
        }
        line[pos  ] = buffer;
        if( buffer == '\n' ) {
            line[pos] = '\0';
            break;
        }
    }
    return line;
}

In addition, the caller should assign the result to a variable, so it can free the memory. Otherwise you'll create lots of memory leaks when you read all the lines of the file.

  •  Tags:  
  • c
  • Related