首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的C程序将只读取文件的第一行

我的C程序将只读取文件的第一行
EN

Stack Overflow用户
提问于 2020-10-23 22:37:21
回答 1查看 272关注 0票数 0

所以我正在尝试读入图书信息来存储,我有部分解析我的char数组,并正确地存储在信息中,但我只能读取文件的第一行。

我将其分为两个部分(为此),input.c是实际处理获取和返回行的部分,catalog.c是打开文件的位置,也是调用input函数的部分。而且我无法在我的机器上访问getLine。

目录

代码语言:javascript
运行
复制
void readInBooks(Catalog *cat, char const *filename)
{
    FILE *fp = fopen(filename, "r");
    if (!fp)
    {
        fprintf(stderr, "Invalid file: %s\n", filename);
        exit( 21 );
    }

    // This is has been updated to the correct working version!
    char *line;
    
    // Thank you Jabberwocky!!
    while ((line = readLine(fp)) != NULL) {

        // This is where all of the parsing goes
        printf("Line: %s", line);
    }
    fclose( fp );
}

输入

代码语言:javascript
运行
复制
char *readLine( FILE *fp )
{
    char *line;
    line = malloc(sizeof(char) * 512);

    if (fgets(line, BUFFER, fp) == NULL) {
        return NULL;
    } else {
        return line;
    }
}

这是我试图读入的文本文件,可能值得注意的是,这个程序应该能够一个接一个地处理多个文件输入。此外,每本书都在自己的行上,每一行都以换行符'\n‘结束。(直接从文本文件复制,这正是我所看到的,很抱歉)

11觉醒的演员阵容,克里斯汀8.7 26389恐怖

76哈克贝利·费恩·吐温,马克8.7·吐温111219男性友谊--小说;幽默故事;密苏里州--小说;种族关系--小说;成长小说;芬恩,哈克贝利(虚构人物) --小说;逃亡奴隶--小说;密西西比河--小说;冒险故事;离家出走的孩子--小说;男孩--小说

84科学怪人;或者,现代普罗米修斯·雪莱,玛丽·沃尔斯通克拉夫特12.6 74959怪物--小说;科学怪兽(虚构人物) --小说;哥特式小说(文学类型);科幻小说;科学怪人,维克多(虚构人物) --虚构;科学家--虚构;恐怖故事

1952年《黄色墙纸》吉尔曼,夏洛特·帕金斯7.2 6067《精神病妇女--小说,女权主义小说,心理小说,结了婚的女人--心理学--小说,性别角色--小说

22022心理小说,变形记--小说

为了进一步澄清我的问题,当我调用:

代码语言:javascript
运行
复制
line = readLine(fp);

然后打印出它打印出来的那一行:

11觉醒的演员阵容,克里斯汀8.7 26389恐怖

多次,因为它一遍又一遍地读取文件的第一行。

正如Jabberwocky所说,由于输入中的某处内存泄漏,它会出现分段错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 23:36:19

你的代码过于复杂和错误。

你可能想要这个:

代码语言:javascript
运行
复制
void readInBooks(Catalog *cat, char const *filename)
{
    FILE *fp = fopen(filename, "r");
    if (!fp)
    {
        fprintf(stderr, "Can't open file: %s\n", filename);
        exit( BAD_INPUT );
    }

    char *line;
    while ((line = readline(fp)) != NULL)
    {
       printf("Line: %s", line);
    }

    fclose(fp);
}

不过,在其他地方可能还有更多的问题。

readline中也有一些问题,我让你看看是什么作为练习。提示:它会泄漏内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64502068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档