就目前而言,在编程领域中,C语言的运用非常之多,它兼顾了高级语言的汇编语言的优点,相较于其它编程语言具有较大优势。
作者 | Martin Sebor
译者 | 苏本如,责编 | 刘静
出品 | CSDN(ID:CSDNnews)
以下为译文:
在所有标准C语言<string.h>头文件中声明的字符串处理函数中,最常用的是那些用来复制和连接字符串的函数。这两组函数都将字符从一个对象复制到另一个对象,并且都返回它们的第一个参数:指向目标对象的起始指针。这种返回值的方式是导致函数效率低下的一个原因,而这正是本文要探讨的主题。
本文中展示的示例代码仅仅用于说明目的。它们可能包含细微的错误,不应该被视为最佳代码实践。
这种返回函数的第一个参数的设计,有时候会被不明白其用途的用户所质疑。这样的例子在StackOverflow网站上有不少,例如关于strcpy返回值,或者C语言的strcpy为什么返回它的参数?的讨论。简单的答案是,这是一个历史性的意外。函数的第一个子集是由Unix第七版在1979年引入的,它由strcat、strncat、strcpy和strncpy函数组成。尽管这四个函数都在Unix的各种版本中使用,但通常情况下,对这些函数的调用却没有使用它们的返回值。尽管这些函数可以同样很容易地定义为返回一个指针来指向最后一个复制的字符(或它的后一位),而且事实证明这种做法也非常有用。
两个或多个字符串的连接操作的最佳复杂度和字符数量成线性关系。但是,如上所述,让函数返回指向目标字符串的指针会导致操作的效率明显低于最佳效率。该函数遍历源字符串序列和目标字符串序列,并获取指向这两个序列末尾的指针。该指针指向函数(strncpy除外)附加到目标序列上的字符串结束符NUL('