【发布时间】:2023-08-11 07:59:02
【问题描述】:
我有一个 C++ 代码,可以在 Linux 和 Windows 上运行。
部分代码包括使用vsnprintf 以使用格式字符串和参数获取字符串。
我注意到,每当格式字符串包含 %p 时,Linux 和 Windows 上的结果是不同的 - Windows 不会在结果前面加上 0x 而 linux 会这样做,而且 Windows 使用大写的地址字母而 Linux 使用小写.
我找不到使两个版本相同的标志。
我的偏好是让 Linux 版本的行为类似于 Windows 版本(因为 Windows 代码是原始代码,所以这就是程序预期的行为方式)。
如果无法在 Linux 中更改 vsnprintf 的行为,我想要一种方法来“修复”在 vsnprintf 输出后包含 %p 的字符串(以一种有效的方式)。
【问题讨论】:
-
%p的行为是implementation defined -
@Borgleader:不是。
0x%X需要unsigned int类型的参数;给它一个指针具有未定义的行为。如果unsigned int和指针大小相同(它们通常不是),它可能会起作用;这始终是未定义行为的可能结果。 -
您的问题被标记为 C 和 C++。它们是两种不同的语言。你用的是哪一个? (在极少数情况下,您可能希望编写在两种语言中都能正常工作的代码;如果是这样,请在问题中说明。)
-
@KeithThompson 我已经更新了这个问题。它在 C++ 中
-
@Justin 没有说明如何将指针转换为
uintptr_t。只有与这些之间的转换才能保证工作。
标签: c++ linux windows portability