c++ - 长度前缀字符串克服了以零结尾的字符串有哪些问题?

标签 c++ c string

长度前缀字符串克服了以零结尾的字符串有哪些问题?

我正在阅读《编写伟大的代码》一书。 1 我就想到了这个问题。

最佳答案

一个问题是,对于以零结尾的字符串,您必须不断地重复查找字符串的结尾。效率低下的经典示例是连接到缓冲区中:

char buf[1024] = "first";
strcat(buf, "second");
strcat(buf, "third");
strcat(buf, "fourth");

在每次调用 strcat 时,程序必须从字符串的开头开始并找到终止符以知道从哪里开始追加。这意味着随着字符串变长,函数会花费越来越多的时间来查找要追加的位置。

使用带长度前缀的字符串,相当于 strcat 函数的函数会立即知道结尾在哪里,并且会在附加到它之后更新长度。

每种表示字符串的方式都各有利弊,它们是否会给您带来问题取决于您对字符串执行的操作以及哪些操作需要高效。上述问题可以通过在字符串增长时手动跟踪其结尾来解决,因此通过更改代码可以避免性能成本。

关于c++ - 长度前缀字符串克服了以零结尾的字符串有哪些问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458433/

相关文章:

c++ - SFINAE 或 enable_if 检查非类型模板参数是偶数还是奇数

c++ - 在 Windows 窗体上获取文本的方法(非托管 C++ 项目)

c++ - 如何在 boost 中正确使用捆绑属性?

python - 在 Xcode for Mac 中编译和链接 Python 的 C 扩展

Android Assets 太慢

我们可以将 va_arg 与 union 一起使用吗?

c++ - 是否可以分析查看程序集的 C/C++ 内联函数?

c - 如何在C中将十六进制字符串(带 float )转换为二进制?

Java:带有 unicode 字符的 String.toCharArray()

c# - 为什么我不能在公共(public)静态字符串上使用串联