Une chaîne vide est une chaîne spéciale avec une longueur de 0. Lors de la comparaison de deux chaînes à l'aide de strncmp , l'existence d'une chaîne vide peut affecter les résultats de la comparaison, en particulier dans les situations suivantes:
Une chaîne est vide <br> Si StrnCMP est utilisé pour comparer une chaîne vide avec d'autres chaînes non vides, la valeur de retour sera généralement un nombre négatif (car les chaînes vides sont considérées comme plus petites que toutes les chaînes non vides de l'ordre du dictionnaire). Par exemple:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-string">'hello'</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>); </span><span><span class="hljs-comment">// Le résultat sera négatif</span></span><span>
</span></span>Ainsi, lorsqu'une chaîne est vide, nous devons considérer comment gérer correctement cette situation.
Comparaison de deux cordes vides <br> Lorsque les deux chaînes sont des chaînes vides, Strncmp reviendra 0 car ils sont égaux dans l'ordre du dictionnaire.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>); </span><span><span class="hljs-comment">// s'avérer 0</span></span><span>
</span></span> La longueur spécifiée est 0 pendant la comparaison
Si la longueur de comparaison spécifiée est de 0, StrnCMP comparera les "premiers 0 caractères" des deux chaînes. Même si la chaîne entrante est une chaîne vide, Strncmp considérera les deux chaînes vides égales et retourne 0.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">'abc'</span></span><span>, </span><span><span class="hljs-string">'def'</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// s'avérer 0</span></span><span>
</span></span>Cela nécessite une attention particulière dans certaines circonstances particulières.
Pour éviter les problèmes potentiels causés par les chaînes vides, nous pouvons adopter les stratégies suivantes:
Vérifiez la chaîne vide <br> Avant de faire la comparaison de la chaîne, vérifiez d'abord si la chaîne est vide. Si la chaîne est vide, vous pouvez décider de renvoyer une valeur par défaut en fonction de la logique métier ou de sauter directement la comparaison. Par exemple:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>) || </span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$str2</span></span><span>)) {
</span><span><span class="hljs-comment">// Logique spéciale pour gérer les cordes vides</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"L'une des cordes est vide\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
}
</span></span>Définissez la valeur par défaut <br> Si la chaîne peut être vide, vous pouvez attribuer une valeur par défaut à la chaîne vide avant de faire une comparaison pour éviter les interférences de la chaîne vide. Par exemple:
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-variable">$str1</span></span><span> ?: </span><span><span class="hljs-string">'default'</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-variable">$str2</span></span><span> ?: </span><span><span class="hljs-string">'default'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span></span>Dans cet exemple, si $ str1 ou $ str2 est vide, ils seront remplacés par la chaîne «par défaut» puis comparés.
Choisissez raisonnablement la longueur de comparaison <br> Dans le développement réel, lorsque vous comparez les chaînes, essayez de choisir la longueur de comparaison appropriée. Si la longueur spécifiée est trop petite, la comparaison peut être terminée tôt, ce qui entraîne des résultats de comparaison inexacts. Surtout dans le cas des chaînes vides ou des chaînes partiellement vides, il est plus nécessaire de déterminer la longueur appropriée en fonction des besoins réels.
Utilisez la fonction Strlen pour éviter les comparaisons inutiles <br> Parfois, nous ne nous soucions que du contenu réel de la chaîne sans avoir à faire une comparaison de toute la chaîne. Pour le moment, vous pouvez d'abord vérifier la longueur de la chaîne, puis décider de comparer:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span> && </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$str2</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"L'une des cordes est vide,Comparaison de sauts。\n"</span></span><span>;
}
</span></span>