STRCAT - Linux手册页

时间:2019-08-20 18:01:23  来源:igfitidea点击:

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)。

InterfaceAttributeValue
strcat(),strncat()Thread safetyMT-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

##代码##

另外参见

bcopy(3),memccpy(3),memcpy(3),strcpy(3),字符串(3),strncpy(3),wcscat(3),wcsncat(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/