在我的应用程序中(可以使用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位。但我很好奇,是否有“格式”功能的“统一”说明符可以自动调整?
答案 0 :(得分:2)
您的代码存在两个问题:
%I
打印指针 - 您应该使用%p
代替,%s
打印宽字符串 - 您应该使用%ls
代替修改后的格式行应如下所示:
L"Line: pbBool=0x%p(%d)%ls"