Condividi tramite


Avviso C26835

RtlCompareMemory restituisce il numero di byte corrispondenti. Prendere in considerazione la sostituzione di questa chiamata con RtlEqualMemory

Osservazioni:

Quando RtlCompareMemoryil valore restituito di viene considerato un valore booleano, restituisce true quando è presente almeno 1 byte uguale prima di trovare una differenza. Inoltre, il confronto tra il risultato di RtlCompareMemory e 0 restituisce false se esiste almeno 1 byte corrispondente. Questo comportamento può essere imprevisto perché è diverso da altre funzioni di confronto, ad strcmpesempio , rendendo il codice più difficile da comprendere. Per verificare l'uguaglianza, è consigliabile usare RtlEqualMemory invece .

Questo avviso è disponibile in Visual Studio 2022 versione 17.7 e versioni successive.

Esempio

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

Per risolvere il problema, verificare se l'intenzione originale era di verificare l'uguaglianza e sostituire la chiamata di funzione con RtlEqualMemory:

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

Vedi anche

RtlEqualMemory macro (wdm.h)
RtlCompareMemory funzione (wdm.h)