提问者:小点点

在套接字程序中分配的字节不能超过4个


char* quickrecv(SOCKET* sock) {
    int ilen;
    char* len = (char*)malloc(4);
    recv(*sock, len, 4, 0);
    memcpy(&ilen, len, sizeof(ilen));
    char* buf = (char*)malloc(ilen);
    //no matter what value ilen is, sizeof buf is always 4 when it shouldn't be
    recv(*sock, buf, ilen, 0);
    return buf;
}

大家好! 有点小问题。 我正在用C++创建一个简单的套接字协议,只是为了好玩。 为了方便起见,我试着做了一个接收函数,但是它没有工作。 当我收到数据时,它要么在输出中添加字符,使输出长度为4个字符,要么切断输出,使输出只有4个字符。 我做了一些调试,显然我的字符指针“buf”只有四个字节的大小。 即使“ilen”每次都不同(我用printf检查过),buf最终也只是分配了四个字节的内存。 为什么buf的大小只有4,尽管malloc的参数每次都不一样? 谢谢!


共1个答案

匿名用户

我不是C/C++专家,但根据memcpy函数参考(http://www.cplusplus.com/reference/cstring/memcpy/)。 您应该传递&len作为第二个参数,如下所示:

    char* quickrecv(SOCKET* sock) {
    int ilen;
    char* len = (char*)malloc(4);
    recv(*sock, len, 4, 0);
    memcpy(&ilen, &len, sizeof(ilen));
    char* buf = (char*)malloc(ilen);
    //no matter what value ilen is, sizeof buf is always 4 when it shouldn't be
    recv(*sock, buf, ilen, 0);
    return buf;
}

但是,如果您确实想传递指针len的值,则应该传递“*len”作为第二个参数