以下代碼讀取同一目錄中的文本文件,並按相反順序在文件中打印出每行。例如,將文本文件我讀:
線1
線2
線3以相反順序讀取文件行(Structs,members,malloc)
這將打印出來:
線3
線2
線1
和它那麼,真正的問題是什麼?這個問題不是關於修復某些代碼的功能,而是我在寫作方面有一點幫助,但更多的是瞭解代碼以及它的功能和完成它的方式。
我對C很陌生(一直在學習幾天),所以如果我不理解相對簡單的東西,請不要尖叫。
問題:
在第一while循環我已分配的內存塊大到足以存儲結構類型「行」和定義的類型「線」的指針「L1」持有的該地址分配內存。現在是問題所在。在下面的代碼行中,另一個內存塊被分配給一個字符串,該字符串的緩衝區足夠大,以保存指針被定義爲l1->行的文本文件中讀取的每個字符串的大小。
對我來說這似乎是不合邏輯的,因爲'l1'只被定義爲'line'類型的指針,但是在這個while循環的第二行'l1-> lines'表明我已經聲明瞭輸入'line'命名爲'l1',我訪問其中一個成員('行'),並將該結構成員的地址分配爲新分配的內存塊的地址。這意味着'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("%s\n",current->lines);
current = current->prev;
}
return 0;
}
相反,我的意思是它指向一個分配的內存塊,其地址分配給l1,這是一個空的但分配的塊。 – Shiri
@Shiri你認爲'malloc(sizeof line)'有什麼作用? – 2013-06-28 09:55:54
創建一個足夠大的內存塊以適合struct-type行並返回它的地址...對嗎? – Shiri