C++ C++;对象指针更改位置

C++ C++;对象指针更改位置,c++,c,pointers,C++,C,Pointers,我有一个函数需要两个指针,一个指向字符串对象,一个指向自定义数据对象: 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 ui

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

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());
}
void KCConverter::DataToHextStringBuf(std::string*HextStringBuf,KCData*data){
char-hexBuf[2];
size\u t position=data->getPosition();
size_t length=data->getLength();
uint8_t*copy=new uint8_t[data->getLength();
memcpy(复制,数据->字节,数据->getLength());
uint8_t电流;
用于(尺寸=位置;i<长度;i++){
std::cout setPosition(data->getLength());
}
但是,KCData指针的值在for循环中发生变化:

第一次迭代:

第二次迭代:

第三次迭代:

但是,如果我取消注释行
sprintf(hexBuf,“%02X”,current);
,指针就不会再改变了。但是
sprintf
为什么要改变
数据的指针地址呢


附言:如果你否决了我的问题,我很高兴知道原因,这样我就可以改进我的问题:)

你的问题满溢了
hexBuf[]

char hexBuf[2]; // 2 bytes long
...
    sprintf(hexBuf, "%02X", current); // Writing 3 bytes
您必须在输出字符串的长度中包含nul字符
\0
。解决方案是使
hexBuf[]
至少有3个字节长