我有一个看起来像这样的文本文件:
Author; Title
Author; Title
etc...
我需要打开此文件并将其逐行读入链接列表。到目前为止,我有这个,但我不知道如何使用strtok(),因为它没有正确读取。 有人可以帮帮我吗?
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
struct node
{
char* author;
char* title;
struct node* next;
};
int main()
{
struct node *root;
struct node *c;
root = malloc( sizeof(struct node) );
root->next = 0;
c = root;
FILE *f;
f = fopen("books.txt", "r");
char line[255];
while( fgets( line, sizeof(line),f) != NULL)
{
char *token = strtok(line, ";");
while(token!=NULL)
{
fread( &c->author, sizeof( c->author ), 1, f );
token = strtok(NULL, " ");
}
fread( &c->title, sizeof( c->title ), 1, f );
//printf("%s",&c->author);
}
fclose(f);
return 0;
}
答案 0 :(得分:0)
看起来不对。你总是需要:
line
变量只是一个临时缓冲区,而char *author
和char *title
变量在没有分配内存的情况下无法生存。在您的代码中调用fread()
完全是胡说八道。您已经调用了fgets()
,这是您从文件中读取数据的位置。其余的应该只是字符串操作。
一种典型的方法是将char *start
指向您感兴趣的数据的开头,char *end
指向您感兴趣的数据后面的第一个字符,然后请求堆分配的副本使用author = strndup(start, end-start)
或使用malloc()
和memcpy()
或strncpy()
的组合执行相同操作。