警告 C26835
RtlCompareMemory
将返回匹配的字节数。 请考虑将此调用替换为RtlEqualMemory
备注
当 RtlCompareMemory
的返回值被视为布尔值时,如果在找到差异之前至少有 1 个相等的字节,则其计算结果为 true。 此外,如果至少有 1 个匹配字节,则将 RtlCompareMemory
的结果与 0 进行比较将得出 false。 此行为可能会出乎意料,因为它与其他比较函数(例如 strcmp
)不同,使得代码更难理解。 若要检查是否相等,请考虑改用 RtlEqualMemory
。
此警告在 Visual Studio 2022 版本 17.7 及更高版本中可用。
示例
int foo(const void* ptr)
{
if (RtlCompareMemory("test", ptr, 5) == 0) // C26835
{
// ...
}
}
若要解决此问题,请验证原始意图是否要检查是否相等,并将函数调用替换为 RtlEqualMemory
:
int foo(const void* ptr)
{
if (RtlEqualMemory("test", ptr, 5)) // C26835
{
// ...
}
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈