繁体   English   中英

在C中读取文件行

[英]Read lines of file in C

我正在尝试逐行阅读标准文件输入。

这是我的代码:

#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行,如何解决它,以及关于我做错了什么的一些解释,因为我不理解问题。

先感谢您。

函数read读取原始字节,并且不会使用字符串终止字符'\\0'终止缓冲区; 然后将其用于printf("%s",...) ,它期望以0结尾的C字符串产生不确定的行为(例如崩溃)。

我建议改用fgets

首先,谢谢所有帮助我的人,并花了一些时间尝试它。

花了几个小时学习并动了脑筋之后,我找到了解决方案。 总而言之,我是*****和菜鸟。

如果有人遇到相同的问题,我将提交我的代码。 十分简单:

#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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM