2012-01-28 25 views
1

我試圖做無法將「idt_entry_t(*)[256]以u8int *

memset(&idt_entries, 0, sizeof(idt_entry_t)*256); 

產生

error: cannot convert 'idt_entry_t (*)[256] {aka idt_entry_struct ()[256]}' to 'u8int {aka unsigned char*}' for argument '1' to 'void memset(u8int*, u8int, u32int)'

如果有幫助,它是在extern "C" {...}擠包的C代碼。

謝謝!

+0

請發佈'idt_entries'聲明。我被錯誤信息中的'(*)'弄糊塗了。 – wallyk 2012-01-28 00:53:43

+0

如果您對'memset'的參數使用正確的類型而不是硬編碼僞造類型,它可能會有所幫助... – 2012-01-28 01:27:34

回答

1

idt_entries是陣列的idt_entry_t 256。

數組idt_entries的值是指向其第一個元素的指針。使用此值作爲memset的第一個參數。陣列的大小爲sizeof idt_entries

因此,這裏是如何正確地調用memset所有的數組元素設置爲0:

memset(idt_entries, 0, sizeof idt_entries); 
+1

仍給出完全相同的錯誤。 – 2012-01-28 00:44:48

+0

看來你正在使用一個非標準的'memset'函數。您必須將第一個參數轉換爲您的第一個memset函數參數的類型。將我的示例中的第一個參數轉換爲'uint8t *'。 – ouah 2012-01-28 00:52:00

+0

謝謝,這工作。 – 2012-01-28 00:54:53

0

idt_entries已經是一個指針。除去符號:

memset (idt_entries, 0, sizeof(idt_entry_t)*256); 
+0

仍然會給出完全相同的錯誤。 – 2012-01-28 00:44:39

2

你編譯這是C++?

添加演員表。

memset ((u8int*)idt_entries, 0, sizeof(idt_entry_t)*256);

+0

同上,但仍然是一個很好的答案 – 2012-01-28 00:56:49