Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Open file is not read the text, Get_Next_Line.c

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.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading