このコードでは、入力ファイルからすべての文字を含むリストを作成しようとしています。主な問題は、「関数のローカル変数を返すことはできません」という文にあります。私をとても混乱させました。リストを動的に割り当てて返しましたが、動的割り当てなしで定義して返すことはでき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 を定義できますか?