Tag: 字符串以

为什么以null结尾的字符串? 或者:以空值终止与字符+长度存储

我正在用C编写语言解释器,我的string类型包含一个length属性,如下所示: struct String { char* characters; size_t length; }; 因此,我必须在我的解释器中花费大量时间手动处理这种字符串,因为C不包含对它的内置支持。 我考虑过切换到简单的以null结尾的字符串只是为了符合底层C,但似乎有很多理由不: 如果使用“length”而不是查找null,则内置边界检查。 您必须遍历整个字符串才能找到它的长度。 你必须做额外的事情来处理以null结尾的字符串中间的空字符。 以空值终止的字符串与Unicode处理不佳。 非空终止字符串可以实习更多,即“Hello,world”和“Hello”的字符可以存储在同一个地方,只是具有不同的长度。 使用以null结尾的字符串无法做到这一点。 字符串切片(注意:字符串在我的语言中是不可变的)。 显然第二个更慢(并且更容易出错:考虑添加对两个函数的begin和end错误检查)。 struct String slice(struct String in, size_t begin, size_t end) { struct String out; out.characters = in.characters + begin; out.length = end – begin; return out; } char* slice(char* in, size_t begin, size_t end) { char* out […]

为什么C中的字符串需要以null结尾?

只是想知道为什么会这样。 我渴望了解更多有关低级语言的知识,而且我只是进入C的基础知识,这已经让我感到困惑。 像PHP这样的语言会在解释和/或解析时自动为null终止字符串吗?