-->

为什么不空终止字符串中的任意放置终止呢?(Why doesn't the null-term

2019-09-23 01:43发布

空字符或空终止符( \0 )被用来终止字符的连续序列。 我发现,在C,我可以在任意位置添加字符转换成字符串和字符串将从该点被切断。 例如:

char * s = "Hello\0World";

会导致s等于字符串"Hello" 。 在JavaScript中,然而,这是不是这样的:

var s = "Hello\0World";

如预期以上将无法正常工作。 s将等于该字符串"HelloWorld"

为什么没有这方面的工作?

Answer 1:

JavaScript不使用NULL终止字符串,而C一样。

JavaScript的字符串被跟踪的字符和长度分别,而不是试图假设一个NULL标志着字符串的结尾存储。



Answer 2:

在C字符串仍然指向在内存中的“Hello \ 0World”存储,只是大多数字符串处理函数认为字符串的结束0的地址。 对于某些功能,你必须通过一个字符串长度的说法,但最简单的阅读,直到他们找到一个空字节。 在内存中的字符串实际上是“你好\ 0World \ 0”。

一个JavaScript引擎不能在这样的情况下,寻找一个空字节,因为你不会永远能够有一个字符串内nullbyte确定字串长度。 很可能有一些事情,在规格。 发动机必须不是存储字符串的长度分开,每当你访问字符串,然后从内存中读取许多字符。

而如何正确地解析和存储缓冲区的大小是什么脚本语言通常试图从用户隐藏。 这是脚本的目的一半,不要求程序员担心加0到制作出的缓冲器和或单独存储字符串的长度,这样的字符串处理函数不打印一串随机字符您的缓冲区找nullbyte外.. 。

那么究竟如何做一个JavaScript字符串的行为? 我不知道,它可能直到达到发动机来形容深入其属性。 只要你与对象的接口,如规范指出,可以以任何方式实现的,使用缓冲区和长度结构,使用翻译文字为0,使用字符的链接列表,等等。



Answer 3:

在JavaScript中NULL在字符串中的字节只是一个NULL字符串中的字节。 如果你想截断字符串

var s = "Hello\0World".split("\0").shift();

但在这种情况下,我认为这没有必要去打扰空字节:)



文章来源: Why doesn't the null-terminator placed arbitrarily in a string terminate it?