8
votes

Pourquoi le Terminator NULL n'est-il pas placé arbitrairement dans une chaîne la terminale?

Le caractère NULL ou NULL-Terminator ( \ 0 code>) doit être utilisé pour mettre fin à une séquence contiguë de caractères. Je trouve que dans C, je peux ajouter le caractère dans une chaîne à une position aléatoire et la chaîne sera coupée de ce point. Par exemple:

var s = "Hello\0World";


2 commentaires

Je pense que JavaScript n'est pas C. donc l'octet nul dans une chaîne est simplement un octet nul dans une ficelle.


La plupart des langues suivent la tradition Pascal de représenter des chaînes comme une matrice avec une longueur entière (permettant ainsi le caractère null). C est en fait l'intrus dans ce sens.


3 Réponses :


12
votes

JavaScript n'utilise pas de chaînes terminées NULL, tandis que c fait.

Les chaînes JavaScript sont stockées en gardant la trace des caractères et la longueur séparément au lieu d'essayer de supposer qu'un null marque la fin de la chaîne.


1 commentaires

Que utilise JS pour les chaînes?



2
votes

in javascript A null octet dans une chaîne est simplement un null octet dans une chaîne. Si vous voulez tronquer la chaîne xxx

mais dans ce cas, je pense qu'il n'a pas besoin de déranger l'octet null :)


0 commentaires

3
votes

La chaîne C pointe toujours sur une adresse en mémoire où "Hello \ 0world" est stocké, seulement que la plupart des fonctions de traitement des chaînes considèrent 0 extrémité de la chaîne. Pour certaines fonctions, vous devez passer un argument de longueur de chaîne, mais le plus simplement lire jusqu'à ce qu'ils trouvent l'octet nul. En mémoire, la chaîne est en réalité "Hello \ 0world \ 0".

Un moteur JavaScript ne peut pas déterminer la longueur de la chaîne en recherchant un octet nul, car vous ne seriez jamais en mesure d'avoir une nullbyte à l'intérieur d'une chaîne. Il y a probablement quelque chose à ce sujet dans les spécifications. Le moteur doit plutôt stocker la longueur de la chaîne séparément, puis lisez que de nombreux caractères de la mémoire chaque fois que vous accédez à la chaîne.

Et comment analyser correctement et stocker la taille des tampons est quelque chose que les langues de script essayent généralement de vous cacher de l'utilisateur. C'est la moitié de la moitié du script, de ne pas nécessiter que le programmeur s'inquiète de l'ajout de 0 Pour créer des tampons de caractères créés et de stocker la longueur de chaîne séparément afin que les fonctions de manutention de chaîne n'impriment pas de caractères aléatoires en dehors de votre Tampon à la recherche d'une nullbyte ...

Alors, comment une chaîne JavaScript se comporte-t-elle? Je ne sais pas, c'est probablement le moteur de décrire ses propriétés en profondeur. Tant que vous interface avec l'objet comme la spécification indique, il peut être implémenté de quelque manière que ce soit, en utilisant des structures de tampon et de longueur, à l'aide d'un caractère de traduction pour 0, à l'aide d'une liste liée des caractères, etc ...


0 commentaires