你的代碼有幾個問題。
首先,你似乎混淆了什麼樣的數據類型與實際變量的聲明。你聲明一個struct
,從那開始它就是一個數據類型,很像int
或double
。在給任何東西分配任何東西之前,你需要有一個東西。您可以通過在功能(ALPHA a;
)中定義一個或通過爲malloc()
或calloc()
分配一個存儲器來獲得一個。
要使用calloc()
,你有兩個參數,一個是你想要多少個凡是,另一個是什麼大小。對於malloc()
,您將兩者相乘。另一個區別是malloc()
會返回內存中的任何內容,而calloc()
會將所有內容初始化爲零。 (根據標準,這是零長度字符串或整數零,其他值不能保證,但對於大多數現代系統,您將得到相當於零的值)。這些函數返回指向已分配內存的指針。
你似乎想tot
int
S,SO(使用calloc()
),正確的說法是一樣的東西int * a = calloc(tot, sizeof(int));
,或int * a = calloc(tot, sizeof(*a));
。C中不需要強制轉換(在C++中是必需的,但通常不會在C++中使用malloc()
或calloc()
),它唯一能做的就是掩蓋一個可能的錯誤(不包括#include <stdlib.h>
)。
一旦你有了,你可以參考int
s如a[3]
。
並將結果在ALPHA
的領域是可行的,但你真的需要一個ALPHA
,所以像
ALPHA a;
a.size = calloc(tot, sizeof(*a));
會工作。例如,您會將其稱爲a.size[3]
。
另外,我沒有看到name
正在做什麼。這是一個字符,對於任何非空字符串都是不夠的,我不知道你爲什麼在calloc()
調用中得到它。您可能希望name
是動態分配的字符串,其中size
是其大小。在這種情況下,你需要改變線的ALPHA
聲明是
int size;
char * name;
和代碼可能會是
ALPHA a;
fgets(line, 60, fp);
a.size = atoi(line);
a.name = calloc(a.size, sizeof(*a.name));
一旦你做到了這一點,在進入10後,你可以參考a.name[0]
到a.name[9]
,這就是你的十個字符。 a.name[10]
將是最後一個。請注意,只能在十個字符的數組中放置一個九個字符的字符串,因爲您需要爲空終止符(即任何C風格字符串的最後一個字符)留出空間。如果您希望能夠輸入指定數量的字符,則在輸入用戶輸入的號碼後,您需要將1加到a.size
。
您可能需要將返回值轉換爲(ALPHA *)以避免編譯器警告。 – Tyler 2010-04-30 14:25:59
這個問題被標記爲C.我會被一個C編譯器惱怒,它給了我一個警告。 – Secure 2010-04-30 14:33:12
@Tyler,轉換malloc()/ calloc()的返回值的唯一原因是與C++兼容。 – 2010-04-30 14:33:14