在這段代碼中,我試圖創建一個列表,其中包含所有的字符形式的輸入文件,我的主要問題是與句子「你不能返回一個局部變量的功能「我被告知這讓我很困惑。我動態分配一個列表並返回它,我可以只定義List list
沒有動態分配並返回它?我相信這是因爲所有的信息都會被自動刪除,我只會留下我創建的原始列表的地址。動態分配和返回一個局部變量
下面是詳細信息代碼:
typedef struct Item {
char tav;
struct Item* next;
} Item;
typedef struct List {
Item* head;
} List;
List* create(char* path) {
FILE* file;
List* list;
Item* trav;
Item* curr;
char c;
file=fopen(path, "r");
if (file==NULL) {
printf("The file's not found");
assert(0);
}
if (fscanf(file, "%c", &c)!=1) {
printf("The file is empty");
assert(0);
}
trav=(Item *)calloc(1, sizeof(Item));
trav->tav=c;
list=(List *)calloc(1, sizeof(List)); /* allocating dynamiclly the list so it won't be lost at the end of the function*/
list->head=trav;
while (fscanf(file, "%c", &c)==1) {
curr=(Item*)calloc(1, sizeof(Item));
curr->tav=c;
trav->next=curr;
trav=curr;
}
trav->next=NULL;
fclose(file);
return list;
}
,對嗎?這是必要的嗎?我可以定義List而不是指向一個返回的指針嗎?
謝謝你的回答。在我的情況下返回非動態分配的列表也不錯?我的意思是如果我的主要功能將它用作「List list = create(file)」? – Joni
@Joni,是的,沒關係。 – Shahbaz