c-以相反的顺序读取文件行(结构、成员、malloc)



下面的代码读取同一目录中的一个文本文件,并以相反的顺序打印文件中的每一行。例如,我读过的文本文件:
第1行
第2行
3号线

会打印出来:
第3行
第2行
第1行

确实如此,那么真正的问题是什么呢?这个问题与其说是关于修复某些代码的功能,不如说是关于理解代码及其功能背后的逻辑以及如何实现

我对C很陌生(已经学习了几天),所以如果我不理解一些相对简单的东西,请不要尖叫。

问题:

在第一个while循环中,我分配了足够大的内存块来存储结构类型"line",并定义了类型为"line"的指针"l1"来保存此分配内存的地址。现在问题来了。在下面的代码行上,另一个内存块被分配给一个字符串,该字符串的缓冲区足够大,可以容纳文本文件中读取的每个字符串的大小,该文本文件的指针被定义为l1->行。

对我来说,这似乎不合逻辑,因为"l1"只被定义为"line"类型的指针,但在while循环的第二行,"l1->lines"表明我已经声明了一个名为"l1"的"line"的类型的结构,我正在访问它的一个成员("lines"),并将该结构成员的地址分配为新分配的内存块的地址。这意味着"l1"既是指向结构的指针,也是指向内存块的指针。

从这一切中,我可以清楚地说,我对正在发生的事情的理解是扭曲的,绝不是正确的。有人能就一个看似微不足道的问题开导我吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>    
typedef struct line {
  char *lines;
  struct line *prev;
} line;
FILE *file;   
int main() {
  line *tail = NULL;
  file = fopen("text.txt","r");
  char line1[80];
  while (fgets(line1,80,file)!=NULL) {
    line *l1 = malloc(sizeof(line));
    l1->lines = malloc(strlen(line1)+1);
    strcpy(l1->lines,line1);
    l1->prev = tail;
    tail = l1;
  }
  line *current;
  current = tail;
  while (current != NULL) {
    printf("%sn",current->lines);
    current = current->prev;
  }
  return 0;
}

这意味着"l1"既是指向结构的指针,也是指向内存块的指针。

我不明白这个有什么问题。结构体驻留在内存中,并且占用一些内存块

顺便说一句,所有这些代码所做的就是构建一个链表,然后向后遍历。

相关内容

  • 没有找到相关文章