所以我正在尝试读入图书信息来存储,我有部分解析我的char数组,并正确地存储在信息中,但我只能读取文件的第一行。
我将其分为两个部分(为此),input.c是实际处理获取和返回行的部分,catalog.c是打开文件的位置,也是调用input函数的部分。而且我无法在我的机器上访问getLine。
目录
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 );
}
输入
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心理小说,变形记--小说
为了进一步澄清我的问题,当我调用:
line = readLine(fp);
然后打印出它打印出来的那一行:
11觉醒的演员阵容,克里斯汀8.7 26389恐怖
多次,因为它一遍又一遍地读取文件的第一行。
正如Jabberwocky所说,由于输入中的某处内存泄漏,它会出现分段错误
发布于 2020-10-23 23:36:19
你的代码过于复杂和错误。
你可能想要这个:
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
中也有一些问题,我让你看看是什么作为练习。提示:它会泄漏内存。
https://stackoverflow.com/questions/64502068
复制相似问题