3

有没有办法让我获取一个内存地址并将其推进一定数量并存储在变量中?该变量类型必须是什么?

例如,在下面的代码中,我想首先查看数据 + 0,然后对于之后的每个步骤查看数据 + 发送。如果我没看错的话,发送存储为字节,数据是内存地址。

bool sendAll(int socket, const void *data, ssize_t size) {
    ssize_t sent = 0;
    ssize_t just_sent;
    while (sent < size) {
        just_sent = send(socket, data + sent, size - sent, 0);
        if (just_sent < 0) {
            return false;
        }
        sent += just_sent;
    }
    return true;
}
4

2 回答 2

3

这就是char*将要做的。指针数学,当指针类型为 时T*,总是以 为增量工作sizeof (T)sizeof (char) == 1根据定义。

所以试试:

just_sent = send(socket, sent + (const char*)data, size - sent, 0);
于 2012-10-30T04:39:48.143 回答
2

只是补充@Ben的答案,因为我认为“只需将调用发送的一行替换为我的答案中的版本即可。” 不是一个很好的答案...

@Rick,重要的是您知道传输了多少字节。无论数组是否是整数数组,如果您想从sent-th字节开始,您可以强制data转换为,(char*)以便编译器在(char*)data + sentsent字节添加到data. 那是因为sizeof(char) == 1字节。相反,如果您转换data(int*),而不是移动sent字节,您将移动sent * sizeof(int)字节。

于 2012-10-30T04:56:33.860 回答