2013-02-23 84 views
1

我真的很生C,並且在演員時遇到了麻煩。下面是我的代碼,我覺得行相關:轉換void *

#define BUF 1025 
char hostname[BUF]; 

hostname = *(char *) qpop(&queue); 

這是我從編譯器得到的錯誤:

error: incompatible types when assigning to type 'char[1025]' from type char

注意qpop返回一個void *的功能。我認爲我的問題是如何從void *轉換爲char [1025]。從錯誤消息,我似乎是鑄造到鍵入char,但不是鍵入char [1025]。我試過這個:

hostname = *(char[1025] *) qpop(&queue) 

但這也沒有工作。

有人可以幫我理解如何做到這一點?謝謝!

+0

鑄適當的方式是沒有第一星號:char_ptr =(字符*)void_ptr; – 2013-02-23 18:43:14

+0

@NannuoLei:其實,*正確*的方式根本就不施放。 'void *'不需要強制轉換將其分配給另一個指針類型。另外,額外的'*'根本沒有做任何演員,它正在做一個解除引用。 – Cornstalks 2013-02-23 18:50:14

+0

@Cornstalks感謝啓蒙。我知道你對虛空是對的,我只是忘記了這一點,並直接解釋瞭如何投射任何東西(void *除外)。是的,第一個*用於解除引用。 – 2013-02-23 18:53:57

回答

6

數組不是一流的類型。你不能分配給一個數組。您必須將內存/元素複製到陣列中:

memcpy(hostname, qpop(&queue), BUF) 
+0

這工作。非常感謝! – Alex 2013-02-23 18:59:22

1

鑄造沒有意義。因爲你不能直接指定數組的指針。 FYI的語法是:hostname = (char(*)[1025]) qpop(&queue)。可以讀此爲「指針的1025個字符陣列」

最佳解決方案是由@Cornstalks給

+0

什麼語法? – ouah 2013-02-23 18:52:41

+0

'* char [1025]'不是有效的類型名稱。 'char'數組'1025'的指針的類型名稱是char(*)[1025]'。無論如何,這是沒有意義的,因爲你不能分配給數組,並且假設你可以,你不會將指針指定爲正確的操作數。 – ouah 2013-02-23 19:05:39

+0

哎呀,你是對的。進行了更正。實際上,我從來沒有用它來鑄造,所以忘記了語法。 – Arpit 2013-02-23 19:09:17

相關問題