Partilhar via


Aviso C26835

RtlCompareMemory retorna o número de bytes correspondentes. Considere substituir essa chamada por RtlEqualMemory

Comentários

Quando RtlCompareMemoryo valor retornado de é tratado como um booleano, ele é avaliado como verdadeiro quando há pelo menos 1 byte igual antes de encontrar uma diferença. Além disso, comparar o resultado de RtlCompareMemory com 0 será avaliado como falso se houver pelo menos 1 byte correspondente. Esse comportamento pode ser inesperado porque é diferente de outras funções de comparação, como strcmp, tornando o código mais difícil de entender. Para verificar a igualdade, considere usar RtlEqualMemory em vez disso.

Esse aviso está disponível no Visual Studio 2022 versão 17.7 e versões posteriores.

Exemplo

int foo(const void* ptr)
{
    if (RtlCompareMemory("test", ptr, 5) == 0) // C26835
    {
        // ... 
    }
}

Para corrigir o problema, verifique se a intenção original era verificar a igualdade e substitua a chamada de função por RtlEqualMemory:

int foo(const void* ptr)
{
    if (RtlEqualMemory("test", ptr, 5)) // C26835
    {
        // ... 
    }
}

Confira também

RtlEqualMemory macro (wdm.h)
RtlCompareMemory função (wdm.h)