如何在C中逐行将文件内容读入结构
在这里,我试图逐行读取文件的内容,并为每一行创建一个结构。问题是当我打印单词列表时,每一个单词都是文件的最后一个单词(在本示例中为})。我相信,由于行经常更改,并且我传递了一个指向字符的指针,因此每个结构的值也会更改。我一直在试图解决这个问题,几乎一天都没有任何运气。将每个单词读入结构并将每个结构链接到链接列表的好方法是什么 请注意,下面使用了一些助手方法。我已经对它们进行了多次测试,它们正在工作 令牌结构如何在C中逐行将文件内容读入结构,c,data-structures,struct,C,Data Structures,Struct,在这里,我试图逐行读取文件的内容,并为每一行创建一个结构。问题是当我打印单词列表时,每一个单词都是文件的最后一个单词(在本示例中为})。我相信,由于行经常更改,并且我传递了一个指向字符的指针,因此每个结构的值也会更改。我一直在试图解决这个问题,几乎一天都没有任何运气。将每个单词读入结构并将每个结构链接到链接列表的好方法是什么 请注意,下面使用了一些助手方法。我已经对它们进行了多次测试,它们正在工作 令牌结构 typedef struct token { char* va
typedef struct token
{
char* value;
struct token* next;
}TOKEN;
target1:
dependency1
{
command1,
command2
}
文件内容
typedef struct token
{
char* value;
struct token* next;
}TOKEN;
target1:
dependency1
{
command1,
command2
}
Main
TOKEN *head = NULL;
// represents each formatted line from the script file
char* line = malloc(161*sizeof(char));
FILE* fileRead = openFile("RawRules.txt", "r");
while((line = readLine(line, fileRead)) != NULL)
{
head = add(head, line);
}
displaylist(head);
freeNodes(head);
fclose(fileRead);
// reads a line of a file into buffer
char* readLine(char* buffer, FILE* file) {
buffer = fgets(buffer, 161, file);
return buffer;
}
添加功能修改自
}
读线功能
TOKEN *head = NULL;
// represents each formatted line from the script file
char* line = malloc(161*sizeof(char));
FILE* fileRead = openFile("RawRules.txt", "r");
while((line = readLine(line, fileRead)) != NULL)
{
head = add(head, line);
}
displaylist(head);
freeNodes(head);
fclose(fileRead);
// reads a line of a file into buffer
char* readLine(char* buffer, FILE* file) {
buffer = fgets(buffer, 161, file);
return buffer;
}
这也没有解决问题
while(true)
{
char* ll = malloc(161*sizeof(char));
ll = readLine(ll, fileRead);
f(ll != NULL)
head = add(head, ll);
else
break;
}
对不起,我是十亿年前用C编程的,所以叫我noob吧 在add()
函数中,您只需分配一个char*
,而不是为每个字符串分配任何新内存(然后复制)。因此,每个标记都指向原始缓冲区。当您在顶层使用单个缓冲区时,您会一次又一次地覆盖它
简而言之:每行需要一个单独的缓冲区。一种方法(不一定是最好的方法)是在add()中执行以下操作:
请记住,在某个时候,您需要释放()
所有这些额外的缓冲区。将文件的一行读入“行”。每行最多应为160个字符。您的代码99%运行良好,或者可能我的代码仍在某个地方被破坏。输出将是正确的,但输出的第一行(即第一个结构数据)将是文件的最后一行。此外,在链表的最末端还有一个额外的结构。它包含同一行(文件的最后一行)