我正在处理一些代码,但有一点要抓住一些二进制数据,然后要从中提取一些字节。因此,我有以下内容:

unsigned char * payload;
int payload_size;
uint32_t major = 0, minor = 0;
payload = out_resp.get_payload(&payload_size); // Retrieve the data, return a pointer
if(payload_size >= 8) { // Need at least 8 bytes in the payload
    std::copy(payload, payload + 4, &major);
    std::copy(payload + 4, payload + 8, &minor);
}


如您所见,有效负载的前四个字节应放在major中,后四个字节应在minor中。但是,在进行调试时,我注意到在第一个std::copy之后,我的变量payload设置为NULL

这是std::copy的预期行为,还是出问题了?我是否应该通过简单地创建另一个指针并将其传递给std::copy来避免这种情况?

最佳答案

std::copy不能像memcpy那样工作。您的std::copy(payload, payload + 4, &major);将复制:

(&major)[0] = payload[0];
(&major)[1] = payload[1];
(&major)[2] = payload[2];
(&major)[3] = payload[3];


那不是您所需要的。 (&major)[1]超出范围,因此对其进行分配会导致未定义的行为。

关于c++ - std::copy设置为null的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15672748/

10-12 13:57