C # – À quoi «\ 0» correspond-il?

Je joue avec Pex et l’un des parameters transmis à ma méthode est "\0" .

Qu’est-ce que ça veut dire? Mon hypothèse est une chaîne vide ( "" ) basée sur le contenu de ma méthode. Cependant, si c’est la même chose, pourquoi ne pas simplement utiliser "" au lieu de "\0" ?

Quelqu’un sait-il ce que c’est?

‘\ 0’ est un ” caractère nul “. Il est utilisé pour terminer les chaînes en C et certaines parties de C ++. Pex fait un test pour voir comment votre code gère le caractère null, probablement à la recherche de l’exploit de sécurité Poison Null Byte .

La plupart du code C # n’a rien à craindre; Si vous passez votre chaîne au code non géré, vous risquez cependant d’avoir des problèmes.

Modifier:

Juste pour être explicite … Pex passe une chaîne contenant un caractère nul. Ce n’est pas une référence nulle.

C’est une chaîne contenant le caractère ‘\ 0’. C # ne traite pas cela de manière particulière – il s’agit simplement du caractère unicode U + 0000. Si vous écrivez:

 int firstCodePoint = text[0]; 

alors vous trouverez que firstCodePoint est 0.

C’est une chaîne avec un caractère nul. Les bibliothèques de chaînes plus anciennes – comme celles utilisées dans les bibliothèques C ou C ++ plus anciennes – utilisaient le caractère ‘\ 0’ pour indiquer la fin de la chaîne.

Les environnements plus récents, tels que .Net, utilisent un système différent, mais il existe de nombreux antécédents relatifs à la fin d’une chaîne avec ‘\ 0’, de sorte qu’il s’agit d’un point d’erreur commun. Les bibliothèques de test telles que Pex l’utiliseront pour s’assurer que votre programme le gère correctement.

Une chaîne de longueur 1, contenant le caractère \ u0000 (alias NUL). Ce personnage n’est pas traité spécialement.

En C, qui utilise \ 0 pour terminer la chaîne, vous allouez également une chaîne de longueur 1. Dans ce cas, les fonctions de chaîne standard indiqueront une longueur de 0, car la chaîne contient \ 0 et se termine avec elle. Vous pouvez modifier en toute sécurité str [0], ou strncat un seul caractère en elle.

 Escape Sequence \0 Character Name Null Unicode Encoding 0x0000 

Voir ce lien.