我正在使用以下函数来创建UUID并将其以人类可读的形式写入预先分配的缓冲区。出了点问题。
void createUUID(char* pDst)
{
UUID lUUIDObj;
UuidCreate(&lUUIDObj);
unsigned char* lDest = reinterpret_cast<unsigned char*>(pDst);
UuidToStringA(&lUUIDObj, &lDest)
}
在方法结束时,调试器说:
我认为两者都有相同的内容,但事实并非如此。
发生什么事了?谢谢。
答案 0 :(得分:5)
查看UuidToStringA
的{{3}},它说:
RPC运行时库为StringUuid参数中返回的字符串分配内存。
这意味着在通话lDest
不再指向pDst
。
答案 1 :(得分:1)
void createUUID(char* pDst)
{
UUID lUUIDObj;
UuidCreate(&lUUIDObj);
unsigned char* lDest = reinterpret_cast<unsigned char*>(pDst);
//UuidToStringA(&lUUIDObj, &lDest);
UuidToStringA(&lUUIDObj, lDest);
}
看起来你破坏了lDest
的值而没有改变它最初指向的值。
答案 2 :(得分:0)
为了完成Joachim Pileborg's answer,以下是更正的功能:
void createUUID(char* pDst)
{
UUID lUUIDObj;
UuidCreate(&lUUIDObj);
unsigned char* lTmpStr;
UuidToStringA(&lUUIDObj, &lTmpStr);
sprintf(pDst, reinterpret_cast<char*>(lTmpStr));
RpcStringFreeA(&lTmpStr);
}