在我的应用程序中(可以使用Visual Studio 2008将其构建为32位和64位),出于特定目的,我需要将结果输出到调试日志中。所以我这样做:

BOOL* pbBool = function1();

CString str;
str.Format(L"Line: pbBool=0x%I64X(%d)%s",
    pbBool,
    pbBool ? *pbBool : -1,
    bAddNewLine ? L"\n" : L""
    );

上面的代码适用于64位版本,但对于32位版本,它会使应用程序崩溃。

我假设问题出在“%I64X”中,因为pbBool对于64位版本是64位,对于32位版本是32位。但是我很好奇,对于“格式”功能是否有一个“统一”说明符,可以对此进行自动调整?

最佳答案

您的代码有两个问题:

  • 使用%I打印指针-您应该改用%p
  • 使用%s打印宽字符串-您应该使用%ls而不是

  • 修改后的格式行应如下所示:
    L"Line: pbBool=0x%p(%d)%ls"
    

    08-28 12:14