[英]How do I store structures that are read from a file in C?
我想出了一個學習C語言的項目,但是我碰到了很多困難。 該項目只是一個紙牌游戲,玩家擁有兩套紙牌,一套是一定尺寸的套牌,另一套是他們收集的紙牌,數量可以根據需要而定。 卡結構如下:
struct card {
char name[256];
char special[256];
char type[100];
char rarity[100];
int points;
};
然后,我有一個名為coll.txt的集合文件。
first card goes here 50
second card goes here 70
...
然后,我有一個(草率)函數,該函數從文件讀取並將其存儲到臨時卡中:
void read_into_collection(FILE *f) {
char *file_text;
char *token;
int i;
struct card temp;
file_text = (char *) malloc(sizeof(struct card));
while(fgets(file_text, sizeof(struct card), f)) {
for(i = 1, token = strtok(file_text, " "); token; i++, token = strtok(NULL, " ")) {
switch (i) {
case 1:
strcpy(temp.name, token);
break;
case 2:
strcpy(temp.special, token);
break;
case 3:
strcpy(temp.type, token);
break;
case 4:
strcpy(temp.rarity, token);
break;
case 5:
temp.points = atoi(token);
break;
default:
i = 0;
break;
}
}
}
free(file_text);
}
因此,當i = 6
我准備將臨時卡移到集合中,並將下一張卡讀入temp變量,依此類推。 但是我該怎么做呢? 我在弄清楚實際應該收集什么時遇到了麻煩。 起初我以為:
struct card *collection = (struct card *) malloc(number_of_cards * sizeof(struct card));
但是,如果我是對的,則malloc()
返回指向大塊內存的指針,並且該內存不是像數組那樣順序的,因此我無法遞增該指針來存儲卡。
我還嘗試計算文件中的行數(每行是一張卡),然后制作該大小的數組,但是我得到一個錯誤,指出該值不是常數。
將這些卡存儲為收藏的最佳方法是什么? 我只是將集合做成一個很大的數組,但是我覺得這種情況經常出現在項目中,寧願學習如何處理它,也不要輕易走開。
但是,如果我是對的,則malloc()返回指向大塊內存的指針,並且該內存不是像數組那樣順序的,因此我無法遞增該指針來存儲卡。
假。 它是順序的。 您可以使用malloc()
創建任何數組:
mystruct* ptr = (mystruct*) malloc(sizeof(mystruct) * numberOfStructs)
for(int i = 0; i < numberOfStructs, i++) {
ptr[i].setSomeInfo(x);
}
這是用C語言完成的標准方法。
我以前經常用C編程,這是我的最愛之一。 這是我的答案。
您使用malloc的方式確實分配了一個數組
struct card *collection = (struct card *) malloc(number_of_cards * sizeof(struct card));
每次對malloc的調用都會返回一個指向內存中不同區域的指針。 但是,一次調用malloc總是返回一個連續的塊。
如果知道卡數,則可以使用它來分配一個數組,然后像這樣訪問它
//added some code to prevent overflow
collection[i].name[255] = 0;
strncpy(collection[i] .name, token, 255);
如果卡數未知,該怎么辦。 然后做一個鏈表。 這是鏈表的主要用途,用於存儲大小未知的集合的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.