错误 C2664:"发送":无法将参数 2 从"服务器问候语"转换为"常量字符 *"



我是C 的初学者,并且正在将C代码(TWAMP RFC5357)移植到一个新项目(IPSLA RFC 6812),我遇到了此问题:

当我尝试使用函数 send 时,我会看到错误"错误c2664:'send':无法将参数2从'servergreeting'转换为'const char *'""没有用户 - 可用的定义转换操作员可以执行此转换,否则操作员无法称为"。

所以,我搜索了这个问题,发现了一些我不了解的答案。

这是代码的一些:

   typedef struct server_greeting    {       UINT8未使用[12];       UINT32模式;       UINT8挑战[16];       uint8盐[16];       UINT32计数;       UINT8 MBZ [12];    } servergreeting; 
 struct active_session {
    int socket;
  //  RequestSession req;
};
struct client_info {
    int socket;
    sockaddr_in addr;
    int sess_no;
    struct active_session sessions[MAX_SESSIONS_PER_CLIENT];
    timeval shutdown_time;
};
static void cleanup_client (struct client_info *client)
{
    fprintf (stderr,"Cleanup client %sn", inet_ntoa(client->addr.sin_addr));
    FD_CLR(client->socket,&read_fds);
    closesocket(client->socket);
    used_sockets--;
    int i;
    for (i = 0; i < client->sess_no; i++)
        /* If socket is -1 the session has already been closed */
        if (client->sessions[i].socket > 0) {
            FD_CLR(client->sessions[i].socket, &read_fds);
            closesocket(client->sessions[i].socket);
            client->sessions[i].socket = -1;
            used_sockets--;
        }
    memset(client, 0, sizeof(struct client_info));
    //client->status = kOffline;
}

static int send_greeting(UINT8 mode_mask, struct client_info *client)
{
    int socket = client->socket;
    int i;
    ServerGreeting greet;
    memset(&greet, 0, sizeof(greet));
    greet.Modes = 1 & mode_mask;
    for (i = 0; i < 16; i++)
        greet.Challenge[i] = rand() % 16;
    for (i = 0; i < 16; i++)
        greet.Salt[i] = rand() % 16;
    greet.Count = (1 << 12);
    int rv = send (socket, greet, sizeof(greet), 0);
    if (rv < 0) {
        fprintf(stderr, "[%s] ", inet_ntoa(client->addr.sin_addr));
        perror("Failed to send ServerGreeting message");
        cleanup_client(client);
    } else {
        printf("Sent ServerGreeting message to %s. Result %dn",
               inet_ntoa(client->addr.sin_addr), rv);
    }
    return rv;
}
 

你能帮我吗?谢谢

send函数将其第二个参数a const char*指针指向缓冲区,因此您需要使用适当的铸件传递struct的地址,

int rv = send (socket, (const char*)&greet, sizeof(greet), 0);

编译器告诉您,它无法从您试图传递给指针类型的结构的转换,您应该相信它。

最新更新