C中的另一个字符串实现:优点和缺点

Ale*_*huk 1 c c++

在阅读了Mr.Spolsky 的文章"Back to Basics"后,我考虑过C中的字符串结构,它将Pascal样式字符串(带有长度字节)和C中的经典ASCIIZ字符串的大部分优点融合在一起,并减少了它们的大多数缺点.主要的要求是使这个新字符串在机器命令中有效.(对于这个任务我假设,每个字符都是单字节.对不起.:))

我的想法是在这种结构的字节数组中存储字符串(也可以包含零字节):

  • 0 - 字符串长度表示的字节长度(值为1或更大);
  • 1..presLength + 1 - 字符串长度表示(1个或更多字节;可能具有固定长度(处理更简单,但确定字符串长度限制)或不;);
  • presLength + 2..arrrayLength - 字符串内容.

我希望这种方法可以解决斯波尔斯基先生注意到的大多数问题,但是假设存在一些缺陷.我想知道你的意见.你怎么看待这件事?

Eri*_*ler 6

到目前为止太复杂了.即使是非常简单的操作 - 在字符串的末尾附加单个字符 - 也需要执行以下步骤(假设可变字符串):

  1. 读取字节0以确定长度呈现的长度
  2. 读取字节1..p,计算长度
  3. 在字符串末尾写字符
  4. 增加长度,检查溢出
  5. 如果溢出:增加字节0,移动整个字符串以腾出空间以进行更长的显示
  6. 写新长度

这不合理.只有一个像pascal一样的字符串,但是用一个字(32位整数)代替长度字节,并且整个字符串是字对齐的,这样更容易也更快.对于任何真正的字符串,最大尺寸的4GB限制几乎不重要.