2010-10-23 24 views
2

嗨到C編程高手爲什麼需要鍵入一個指針?

我不是C.專家,我試圖找到php passing c struct data throught socket programming

答案所以我開始一個新的線程,以C語言的明確要求

下面

是數據:

typedef struct 
{ 
    UI2    todo; 
    char   rz[LNG_RZ + 1]; 
    char   saId[LNG_SAT_ID + 1]; 
    char   user[LNG_USER + 1]; 
    char   lang[LANGLEN + 1]; 
    SI4    result;  
    UI4    socket; 
    char   text[LNG_ALLG + 1]; 
    char   filename[MAX_PATHLEN]; 
} dmsAuf_Head; 

而這個數據需要被通過這個通過socket發送:

rval = send(dms_aufHead->socket, (char *) dms_aufHead, sizeof(dmsAuf_Head), 0); 

爲什麼需要類型它通過

(字符*)投數據通過socket發送之前dms_aufHead

你們可以猜測嗎?你介意用一些俗人的語言來解釋。謝謝。

+1

歡迎來到SO。請你能重新解釋一下你的問題的標題,以便它在語法上是正確的,並且有意義嗎? – 2010-10-23 07:28:01

回答

0

發送函數需要一個char *參數。這是唯一的原因。傳遞給函數的類型必須是正確的。

+0

許多年前,緩衝區指針參數的類型已更改爲'void *'。 – jilles 2010-10-23 20:16:12

+0

@jilles:哦,親愛的。現在我覺得很傻。謝謝你讓我知道。 – JoshD 2010-10-24 05:03:40

3

我不知道這是否是一個錯字,但您不需要投到char*,但您忘記將您的變量的地址與&運算符一起使用。然後send需要一個void const*指針的緩衝區,所以一切都應該沒問題。這應該這樣做:

rval = send(dms_aufHead->socket, &dms_aufHead, sizeof(dmsAuf_Head), 0); 
0

您不必投擲指針。 send需要一個const void *的參數,並且簡單地將您的結構的地址自動轉換爲void *

相關問題