无法在 OutputDebugStringW 中使用换行符,在 DbgView 中出现奇怪的行为

Can't use newline in OutputDebugStringW, weird behavior in DbgView

我在我的应用程序中使用了 OutputDebugStringW。由于 WinDBG 不会自动附加换行符,因此我不得不在输出缓冲区中添加 \n

#include <iostream>
#include <windows.h>

int main()
{
    wchar_t buff[100];
    ZeroMemory(buff, sizeof(buff));
    _snwprintf_s(buff, sizeof(buff) / sizeof(wchar_t) - 1, L"[test] %d", GetCurrentThreadId());
    buff[wcslen(buff)] = L'\n';
    OutputDebugStringW(buff);

    char buff2[100];
    ZeroMemory(buff2, sizeof(buff2));
    snprintf(buff2, sizeof(buff2), "[test2] %d", GetCurrentThreadId());
    buff2[strlen(buff2)] = '\n';
    OutputDebugStringA(buff2);
}

它有效,但 DbgView 打印出意想不到的东西:

  1. 对于 OutputDebugStringA,换行正常
  2. 对于 OutputDebugStringW,无法识别换行符

如果我不附加换行符,它们都可以正常工作。这里有什么问题?

正如 Retired Ninja 所指出的,_snwprintf_s 如果程序是在 DEBUG 模式下构建的,则用另一个值填充缓冲区。在这种情况下,wchar_t 填充为 0xFEFE:

如果我在 Release 模式下编译程序,字符串将以 NULL 结尾。