C # - Qu'est-ce que « \ 0 » assimilent à?
-
21-09-2019 - |
Question
Je joue avec Pex et l'un des paramètres passe dans ma méthode est "\0"
.
Qu'est-ce que cela signifie? Ma conjecture est une chaîne vide (""
) en fonction du contenu de ma méthode. Cependant, si elle est la même alors pourquoi ne pas simplement utiliser ""
au lieu de "\0"
?
Quelqu'un sait ce qu'il est?
La solution
'\ 0' est un " caractère nul ". Il est utilisé pour mettre fin à des chaînes en C et certaines parties de C ++. Pex fait un test pour voir comment votre code gère le caractère nul, à la recherche probable pour le Poison Null la sécurité byte d'exploitation.
La plupart du code C # n'a rien à craindre; si vous passez votre chaîne à code non managé, cependant, vous pouvez avoir des problèmes.
Modifier
Juste pour être explicite ... Pex passe une chaîne contenant un caractère nul. Ceci est pas une référence null.
Autres conseils
Il est une chaîne contenant le caractère « \ 0 ». C # ne traite pas d'une façon particulièrement spéciale - il est juste caractère unicode U + 0000. Si vous écrivez:
int firstCodePoint = text[0];
vous trouverez firstCodePoint
est 0.
Il est une chaîne avec un caractère nul. bibliothèques de chaînes plus anciennes - comme celui utilisé en C ou plus C ++ bibliothèques - ont utilisé le caractère « \ 0 » pour indiquer la fin de la chaîne.
Les nouveaux environnements tels que .Net utilisent un système différent, mais il y a beaucoup d'histoire autour de la fin d'une chaîne avec « \ 0 », de sorte que c'est un point d'erreur commune. bibliothèques Test comme Pex l'utiliser pour vous assurer que votre programme correctement gère.
Une chaîne de longueur 1, qui contient le caractère \ u0000 (aka NUL). Ce caractère n'est pas traitée spécialement.
Dans C, qui utilise \ 0 mettre fin à la chaîne, vous allouez également une chaîne de longueur 1. Dans ce cas, les fonctions de chaîne standards rapporteront une longueur de 0, puisque la chaîne contient \ 0 tout en étant terminé avec elle . Vous pouvez modifier en toute sécurité str [0], ou strncat un caractère unique en elle.
Escape Sequence
\0
Character Name
Null
Unicode Encoding
0x0000