Avvertimento C26835
RtlCompareMemory
restituisce il numero di byte corrispondenti. Prendere in considerazione la sostituzione di questa chiamata conRtlEqualMemory
Osservazioni:
Quando RtlCompareMemory
il 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 strcmp
esempio , 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
)