strcat , strncat , strxfrm , strxfrm_l , strcpy , strncpy , stpcpy , strdup 或 strndup 子例程

用途

复制并附加内存中的字符串。

标准 C 库 (libc.a)

语法

#include <string.h>

字符 * 斯特尔卡特 ( String1,  String2) 字符 *字符串 1 连接字符 *字符串 2;

字符 * strncat (String1 String2 编号) char *String1; const char *String2; size_t 数字;

大小  斯特克斯弗尔姆 (String1, String2, 数字) 焦尔 *字符串 1;  连接字符 *字符串 2; 大小 数字;

size_t strxfrm_l (String1 String2Number语言环境) char *String1; const char *String2; size_t Number; locale_t Locale;

字符 * strcpy (String1 String2) char *String1; const char *String2;

字符 * strncpy (String1 String2 Number) char *String1; const char *String2; size_t 数字;

char * stpcpy (String1String2) char *String1; const char *String2;

char * stpncpy (String1 String2size) char *String1; const char *String2; size_t size;

字符 * strdup (String1) const char *字符串 1;

char * strndup (String1 size) const char *String1; size_t 大小;

描述

strcatstrncatstrxfrmstrcpystrxfrm_l strncpystpcpystpncpystrdupstrndup 子例程在内存中复制并附加字符串。

String1String2 参数指向字符串。 字符串是由空字符终止的字符数组。 strcatstrncat strcpy, 和 strncpy 子例程都将更改 String1 参数中的字符串。 但是,它们不会检查 String1 参数指向的数组的溢出。 按字符逐个执行字符串移动,并从左侧开始。 按预期向左工作的重叠移动,但向右的重叠移动可能会产生意外的结果。 所有这些子例程都在 string.h 文件中声明。

strcat 子例程将 String2 参数指向的字符串的副本添加到 String1 参数指向的字符串的末尾。 strcat 子例程返回指向以 null 结束的结果的指针。

斯特恩卡特 子例程将 数字 参数指定的多个字节从 String2 参数复制到 String1 参数指向的字符串末尾。 如果在 String2 参数的字符串中迂到空字符,那么子例程将在 Number 参数指定的字节数结束之前停止复制。 strncat 子例程返回指向以 null 结束的结果的指针。 strncat 子例程返回 String1 参数的值。

strxfrm 子例程变换由 String2 参数指向的字符串,并将其放在由 String1 参数指向的数组中。 如果可能, strxfrm 子例程会变换整个字符串,但在 String1 参数指向的数组中放置的字节数不超过 Number 参数指定的字节数。 因此,如果 Number 参数的值为 0 ,那么 String1 参数可以是空指针。 strxfrm 子例程返回转换后的字符串的长度,不包括终止的空字节。 如果返回的值等于或大于 Number 参数的值,那么 String1 参数指向的数组内容不可确定。 如果 Number 参数指定的字节数是 0 ,那么 strxfrm 子例程返回存储转换后的字符串所需的长度,不包括终止的空字节。 strxfrm 子例程由 LC_COLLATE 类别确定。

strxfrm_l () 函数等同于 strxfrm () 函数,但所使用的语言环境数据来自 Locale所表示的语言环境。

斯特尔奇皮斯特普奇皮 子例程将 String2 参数指向的字符串复制到 String1 参数指向的字符数组。 复制空字符后,复制将停止。 strcpy 子例程返回 String1 参数的值 (如果成功)。 否则,将返回空指针。

stpcpy 子例程返回一个指针,该指针指向复制到 String1 参数中的终止 NULL 字符 (如果成功)。 否则,将返回空指针。

斯特恩奇皮斯滕奇皮 子例程将 数字 参数指定的字节数从 String2 参数指向的字符串复制到 String1 参数指向的字符数组。 如果 String2 参数值小于指定的字符数, 然后, strncpy 子例程将 String1 参数的尾部空字符填充到相当于 Number 参数值的字节数。 如果 String2 参数正好是指定的字符数或更多字符,那么将仅复制 Number 参数指定的字符数,并且结果不会以空字节终止。 strncpy 子例程返回 String1 参数的值。

如果将空字符写入目标,那么 stpncpy 函数将返回第一个此类空字符的地址。 否则,将返回 &String1[数字]

strdup 子例程返回一个指向新字符串的指针,该字符串与 String1 参数所指向的字符串重复。 新字符串的空间是通过使用 malloc 子例程获得的。 如果无法创建新字符串,那么将返回空指针。

strndup 子例程等同于 strdup 子例程,只是它最多将 size 加上一个字节复制到新分配的内存中,以空字符终止新字符串。 如果 String1 的长度大于 size,那么仅复制 size 字节。 如果 size 大于 String1的长度,那么应将 String1 中的所有字节复制到新的内存缓冲区中, 包含终止 NULL 字符

参数

描述
编号 指定要复制或变换的字符串中的字节数。
String1 指向将指定数据复制或附加到的字符串。
String2 指向包含要复制,追加或变换的数据的字符串。
语言环境 指定必须变换字符串的语言环境。

错误代码

strcatstrncatstrxfrmstrxfrm_lstrcpy, 如果发生以下情况, strncpystpcpystpncpystrdupstrndup 子例程将失败:

描述
Efault 字符串参数是无效地址。

此外, strxfrmstrxfrm_l 子例程在下列情况下失败:

描述
EINVAL 字符串参数包含整理顺序域外的字符。

在下列情况下, strdupstrndup 函数将失败:

描述
ENOMEM 可用存储空间不足。