长度前缀字符串克服了以零结尾的字符串有哪些问题?
我正在阅读《编写伟大的代码》一书。 1 我就想到了这个问题。
最佳答案
一个问题是,对于以零结尾的字符串,您必须不断地重复查找字符串的结尾。效率低下的经典示例是连接到缓冲区中:
char buf[1024] = "first";
strcat(buf, "second");
strcat(buf, "third");
strcat(buf, "fourth");
在每次调用 strcat
时,程序必须从字符串的开头开始并找到终止符以知道从哪里开始追加。这意味着随着字符串变长,函数会花费越来越多的时间来查找要追加的位置。
使用带长度前缀的字符串,相当于 strcat
函数的函数会立即知道结尾在哪里,并且会在附加到它之后更新长度。
每种表示字符串的方式都各有利弊,它们是否会给您带来问题取决于您对字符串执行的操作以及哪些操作需要高效。上述问题可以通过在字符串增长时手动跟踪其结尾来解决,因此通过更改代码可以避免性能成本。
关于c++ - 长度前缀字符串克服了以零结尾的字符串有哪些问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458433/