我有一个需要两个指针的函数,一个指向字符串对象,另一个指向自定义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指针的值正在改变:
第一次迭代:
第二次迭代:
第三次迭代:
但是,如果我取消注释行sprintf(hexBuf, "%02X", current);
,则指针不再发生变化。但是为什么sprintf
改变了data
????
P.S。:如果你把我的问题投下来,那么了解原因会很好,所以我可以改进我的问题:)
答案 0 :(得分:7)
你满溢hexBuf[]
:
char hexBuf[2]; // 2 bytes long
...
sprintf(hexBuf, "%02X", current); // Writing 3 bytes
您必须在输出字符串的长度中包含空字符\0
。解决方案是使hexBuf[]
至少3个字节。