-1

我正在使用以下函数来创建 UUID 并将其以人类可读的形式写入预分配的缓冲区。出了点问题。

void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lDest = reinterpret_cast<unsigned char*>(pDst);
    UuidToStringA(&lUUIDObj, &lDest)
}

在方法结束时,调试器说:

  • lDest = 0x01fe4fd8 "df4a5ed8-c0d2-495a-84d7-ce0e07cf2113"
  • PDST = 0x0012EC7C“ìììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììì”

我以为两者都有相同的内容,但事实并非如此。

发生了什么?谢谢。

4

3 回答 3

5

查看 的文档UuidToStringA它说:

RPC 运行时库为 StringUuid 参数中返回的字符串分配内存。

这意味着调用后lDest不再指向pDst.

于 2012-01-17T11:27:26.143 回答
1
void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lDest = reinterpret_cast<unsigned char*>(pDst);
    //UuidToStringA(&lUUIDObj, &lDest);
    UuidToStringA(&lUUIDObj, lDest);
}

看起来您在不更改它最初指向的的情况下破坏了 的值。lDest

于 2012-01-17T11:27:50.247 回答
0

为了完成Joachim Pileborg 的回答,这里是更正后的函数:

void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lTmpStr;
    UuidToStringA(&lUUIDObj, &lTmpStr);
    sprintf(pDst, reinterpret_cast<char*>(lTmpStr));
    RpcStringFreeA(&lTmpStr);
}
于 2012-01-17T12:24:36.957 回答