这是在64位计算机上容纳整数值和Unicode字符串的正确大小吗?还是我错过了什么?

    DWORD errorMessageID = GetLastError();
        const wchar_t msgFmt[] = L"foo baaa. Error code = %d";
        wchar_t bufferMsg[sizeof(msgFmt) +        // room for fmt message string itself
            21 +  // enough to hold numbers up to 64-bits
            sizeof(wchar_t)         // byte-terminattor
        ];
        int nBytesWritten = swprintf_s(bufferMsg,
            msgFmt,
            sizeof(msgFmt),
            errorMessageID);

        MessageBox(NULL,
                    bufferMsg,
                    TEXT("Copy to clipboard failed"),
                    MB_OK | MB_ICONERROR);

最佳答案

不,这是不正确的。正确的代码应如下所示:

const wchar_t msgFmt[] = L"foo baaa. Error code = %d";
wchar_t bufferMsg[sizeof(msgFmt)/sizeof(wchar_t) + // room for fmt message string itself
    21 +      // enough to hold numbers up to 64-bits
    1         // symbol-terminator
];
int nBytesWritten = swprintf_s(bufferMsg,
    sizeof(bufferMsg)/sizeof(wchar_t),
    msgFmt,
    errorMessageID);


在这两种情况下,都使用字节大小而不是元素数量加上参数顺序是错误的。您调用MessageBox()函数是正确的。

10-04 21:28