2014-05-12 65 views
0

我有這樣的C代碼:如何從struct讀取數組?

struct ATAInfo* data; 

data = (struct ATAInfo*)malloc(512); 

然後我調用一個函數,它填補了結構。這有點難以解釋,因爲我調用了一個函數,通過一個從我的CD-ROM設備讀取信息的中斷進行系統調用。 我這樣調用它:

ata_identify(0, data) 

和函數的定義如下:

bool ataIdentify(int device, struct ATAInfo *ataInfo){ 

現在我有這個填充:

uint16_t pointer = ataInfo; 
uint16_t word; 
for (int i = 0; i < 256; i++) 
{ 
    word = inw(DATA_PORT); 
    *(uint16_t *) pointer = word; 
    pointer ++; 
} 

現在我想讀一個屬性在結構中,聲明如下:

uint8_t ModelNumber[40]; 

我這樣做:

printf("name: %s\n", data->ModelNumber); 

但我得到 「的名字:(空)」。

+1

應該是:'數據=的malloc(的sizeof(*數據));' –

+0

刪除C++標籤(除非你想要評論你不應該使用'malloc',使用'iostreams'而不是'printf'等等)。 – crashmstr

+0

可能的是,意外輸出「name:(null)」與結構初始化的方式有關;也許與「填充結構」的功能有關。 –

回答

1

的代碼塊看起來不正確:

uint16_t pointer = ataInfo; 
uint16_t word; 
for (int i = 0; i < 256; i++) 
{ 
    word = inw(DATA_PORT); 
    *(uint16_t *) pointer = word; 
    pointer ++; 
} 

您是不是要找:

uint16_t* pointer = (unit16_t*)ataInfo; 
uint16_t word; 
for (int i = 0; i < 256; i++) 
{ 
    word = inw(DATA_PORT); 
    *pointer = word; 
    pointer ++; 
} 
+0

哦,是的,謝謝。但可悲的是,它也不起作用。 – progNewbie