Чтение строк файла в C - PullRequest
       24

Чтение строк файла в C

0 голосов
/ 24 января 2019

Я пытаюсь читать построчно стандартный файл ввода.

Это мой код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFER_SIZE 1204

char* readLine(char* buffer){
    int i = 0;
    for(i; i< BUFFER_SIZE; i++){
        printf("%c",buffer[i]);
        if( '\n' == buffer[i]){
            char* line[124];
            memcpy( line, &buffer[0], i-1 );
            return *line;
        }
    }
    free(buffer);
}
int doStuffWithLine(char* line){
    return 1;
}
int main(int argc, char *argv[])
{
    ssize_t aux1;
    char *buffer = malloc(sizeof(char)*BUFFER_SIZE);
    char *line = malloc(sizeof(char)*BUFFER_SIZE);
    while((read(STDIN_FILENO, buffer, BUFFER_SIZE))>0){ 
        line = readLine(buffer);
        doStuffWithLine(line);
        printf("%s", line);
    }
    return 0;
}

Это содержимое входного файла:

lol1
lol2
lol3

И это вывод моей программы:

lol1
Segmentation fault (core dumped)

Я хочу знать, как читать строки 2 и 3, решить и немного объяснить, что я делаю неправильно, потому что я не понимаю проблему.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Прежде всего, спасибо всем, кто помог мне и провел некоторое время, пытаясь это сделать.

Проведя несколько часов, изучая и ломая мой мозг, я нашел решение.В заключение я ***** и нуб.

Если у кого-то возникла такая же проблема, я отправляю свой код.Легкий горох:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>

char* doStuff(char* line){
    return line;
}

int main(int argc, char *argv[])
{
    char *line = malloc(sizeof(char)*LINE_MAX);
    while(fgets(line, LINE_MAX, stdin)!= NULL)
    {
        line = doStuff(line);
        printf("%s", line);
    }
    return 0;
}
0 голосов
/ 24 января 2019

Функция read читает в необработанных байтах и ​​не завершает ваш буфер символом завершения строки '\0';Использование его тогда для printf("%s",...), который ожидает 0 -определенную C-строку, приводит к неопределенному поведению (например, крушению).

Я бы предложил использовать fgets вместо.

...