STRCAT - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
strcat,strncat-连接两个字符串
语法
#include <string.h> char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src, size_t n);
说明
strcat()函数将src字符串附加到dest字符串,覆盖dest末尾的终止空字节(aq \ 0aq),然后添加终止空字节。字符串可能不会重叠,并且目标字符串必须具有足够的空间以容纳结果。如果dest不够大,则程序行为是不可预测的。缓冲区溢出是攻击安全程序的最常用方法。
strncat()函数类似,除了
- *
- 它将最多使用src中的n个字节;和
- *
- 如果src包含n个或更多字节,则不需要以null结尾。
与strcat()一样,dest中的结果字符串始终以空值结尾。
如果src包含n个或更多字节,则strncat()将n + 1个字节写入dest(来自src的n加终止空字节)。因此,dest的大小必须至少为strlen(dest)+ n + 1。
strncat()的简单实现可能是:
char * strncat(char *dest, const char *src, size_t n) { size_t dest_len = strlen(dest); size_t i; for (i = 0 ; i < n && src[i] != aq#include <string.h> #include <time.h> #include <stdio.h> int main(int argc, char *argv[]) { #define LIM 4000000 int j; char p[LIM + 1]; /* +1 for terminating null byte */ time_t base; base = time(NULL); p[0] = aq##代码##aq; for (j = 0; j < LIM; j++) { if ((j % 10000) == 0) printf("%d %ld\n", j, (long) (time(NULL) - base)); strcat(p, "a"); } }aq ; i++) dest[dest_len + i] = src[i]; dest[dest_len + i] = aq##代码##aq; return dest; }
返回值
strcat()和strncat()函数返回指向结果字符串dest的指针。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
strcat(),strncat() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008,C89,C99,SVr4、4.3BSD。
备注
某些系统(BSD,Solaris和其他系统)提供以下功能:
size_t strlcat(char * dest,constchar * src,size_t大小);
此函数将以null终止的字符串src附加到字符串dest,从src复制最多size-strlen(dest)-1,并向结果添加终止的空字节,除非size小于strlen(dest)。此函数解决了strcat()的缓冲区溢出问题,但是如果大小太小,调用方仍必须处理数据丢失的可能性。该函数返回尝试创建的字符串strlcat()的长度;如果返回值大于或等于大小,则发生数据丢失。如果数据丢失很重要,则调用者必须在调用之前检查参数,或者测试函数的返回值。 strlcat()在glibc中不存在,并且未由POSIX标准化,但是可通过libbsd库在Linux上使用。
示例
因为strcat()和strncat()必须使用从字符串开头开始的搜索来找到终止字符串dest的空字节,所以这些函数的执行时间根据字符串dest的长度而定。这可以通过运行以下程序来演示。 (如果目标是将多个字符串连接到一个目标,那么从每个源字符串手动复制字节,同时保持指向目标字符串末尾的指针将提供更好的性能。)
Program source
##代码##出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。