C ++对象指针更改位置

时间:2015-05-24 17:40:37

标签: c++ c pointers

我有一个需要两个指针的函数,一个指向字符串对象,另一个指向自定义KCData对象:

void KCConverter::dataToHexStringBuf(std::string *hexStringBuf, KCData *data) {
    char hexBuf[2];
    size_t position = data->getPosition();
    size_t length = data->getLength();
    uint8_t *copy = new uint8_t[data->getLength()];
    memcpy(copy, data->bytes, data->getLength());

    uint8_t current;
    for (size_t i = position; i < length; i++) {
        std::cout << "Reading char " << i << std::endl;
        current = copy[i];
        sprintf(hexBuf, "%02X", current);
        hexStringBuf->push_back(hexBuf[0]);
        hexStringBuf->push_back(hexBuf[1]);
    }
    data->setPosition(data->getLength());
}

但是,for循环中KCData指针的值正在改变:

第一次迭代: First iteration

第二次迭代: enter image description here

第三次迭代: enter image description here

但是,如果我取消注释行sprintf(hexBuf, "%02X", current);,则指针不再发生变化。但是为什么sprintf改变了data ????

的指针地址

P.S。:如果你把我的问题投下来,那么了解原因会很好,所以我可以改进我的问题:)

1 个答案:

答案 0 :(得分:7)

你满溢hexBuf[]

char hexBuf[2]; // 2 bytes long
...
    sprintf(hexBuf, "%02X", current); // Writing 3 bytes

您必须在输出字符串的长度中包含空字符\0。解决方案是使hexBuf[]至少3个字节。