2010-10-23 47 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 *

相关问题