【发布时间】:2019-01-16 22:32:11
【问题描述】:
我正在尝试理解“标准 C 库”中提出的连接字符串的方法。
在讨论了如何连接两个字符串 s1 和 s2 之后。作者提出,对于多个字符串(2个以上),
“...喜欢
strcpy(s1 += strlen(s1), s2)这样的形式,这样可以节省对字符串初始部分的重复和不断加长的重新扫描...”(第395页)
我无法理解这段代码 sn-p。我的理解是,他将s1的长度添加到指针中,以便将Null字符的索引传递给strcpy,这样strcpy就不必遍历s1来查找Null字符,而可以开始将s2复制到s1,对吗?
如果我的理解是正确的,那么当strlen代替strcpy时,这如何提高效率?
【问题讨论】:
-
因为对于多个连接,您不必扫描正在构建的 整个 字符串。缺点是更容易忘记是否有足够的空间来调用固有危险的
strcat或其等效项。 -
strcpy()在复制前不扫描空终止符。strcat()确实如此。作者通过使用strcpy(s1 += strlen(s1), s2)来避免strcat(s1, s2)。但是,strlen()扫描空终止符,所以这并没有真正获得任何东西。但是,如果您可以避免strlen(),那么这将变得更加有用 -
@Ry- 这是同一个“问题”的“解决方案”。
-
请注意,需要注意确保您没有跑过目标缓冲区的末尾——在 C 中总是需要这种注意。显示的代码片段是好方法的核心它(它避免了与
strcat()重复字符串连接所导致的二次行为 - 请参阅 Shlemiel the Painter;如果您不这样做,Google 知道,请参阅上面的 Joel on Software 链接)。但除非知道使用它的更大背景,否则它不是“安全的”。