2017-05-08 87 views
1

我得到这个错误,当我运行下面的代码,第21行出错无效换算* [fpermissive]用C

错误

出错无效转换从int为const char * [fpermissive]

代码

receive(struct sockaddr_in sockad, struct message m){ 
    int rc; 
    int i; 
    int ibuf; 
    i = sizeof(sockad); 
    rc = recvfrom(sd,&m,strlen(ibuf),0,(struct sockaddr *)&sockad,(unsigned long)&i); /* line 21*/ 
    if (rc < 0) { 
    perror("recvfrom"); exit(1); 
    } 
} 

我试过SOLU蒸发散,在计算器,但没有运气

+3

这个片段有几个错误,但没有看到_complete program_我们不能告诉你如何解决它。 (例如,我强烈怀疑'receive'的原型是错误的,所以我需要看到调用者。) – zwol

+1

您正在通过'ibuf',一个'int'来函数'strlen()',它的参数成为一个char *',指向以空字符结尾的字符数组。由于'ibuf'甚至没有初始化,所以这不可能是你真正想要做的。 –

+1

另外:'int i;' - >'socklen_t i;' – chux

回答

3

错误是由strlen(ibuf)引起...当int ibuf ...

你应该通过一个字符串来strlen,虽然你可能已经打算用sizeof(m)

您可能也打算使用指针,如struct message *m,使:

void receive(struct sockaddr_in * sockad, struct message * m){ 
    int rc; 
    socklen_t i; 
    i = sizeof(*sockad); 
    rc = recvfrom(sd, m, sizeof(*m),0, sockad, &i); /* line 21*/ 
    if (rc < 0) { 
    perror("recvfrom"); exit(1); 
    } 
} 
+0

那我该怎么办? –

+0

'(unsigned long)&i' with'i'未初始化的'int'也是错误的,'struct sockaddr_in'参数也可能是一个指向调用者变量的指针。 – zwol

+0

@MariyamMohammedJalil,我不确定你最初的意图是什么,但我更新了更多细节的答案。 – Myst

0

问题与代码:

的strlen(IBUF)

IBUF是一个整数,而不是字符串。

+0

那我该怎么办? –

相关问题