字符串格式方法在32/64位构建之间的一致性

时间:2014-07-25 16:44:48

标签: c++ visual-studio winapi mfc 64-bit

在我的应用程序中(可以使用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位。但我很好奇,是否有“格式”功能的“统一”说明符可以自动调整?

1 个答案:

答案 0 :(得分:2)

您的代码存在两个问题:

  • 使用%I打印指针 - 您应该使用%p代替,
  • 使用%s打印宽字符串 - 您应该使用%ls代替

修改后的格式行应如下所示:

L"Line: pbBool=0x%p(%d)%ls"