当前位置: C语言 -- 附录 -- strncat_s

strncat_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
errno_t strncat_s(char * restrict s1,
      rsize_t s1max,
      const char * restrict s2,
      rsize_t n);

描述:

假设m表示表达式s1max - strnlen_s(s1, s1max)的值。

该函数从参数s2指向的数组中添加不超过n个连续字符(空字符后面的字符不会被复制。)到参数s1指向字符串的末尾。参数s2指向数组的初始字符覆盖参数s1指向字符串的终止空字符。如果未能从s2中复制空字符,函数将s1[s1max-m+n]设置为空字符。

strncat_s函数返回时,参数s1指向的、大小为s1max个字符的数组中strncat_s函数写入的终止空字符(如果存在。)之后的所有元素值都是未指定的。这允许实现在将字符从s2添加到s1的同时,检查这些字符是否存在空字符。这种方式可能在发现第一个元素设置为空字符前,已向s1的每个元素都写入了一个字符。


运行约束:

参数s1和参数s2不能是空指针。参数s1max和参数n应不大于宏RSIZE_MAX。参数s1maxm不等于0m等于0意味着:进入strncat_s函数时,s1不是以空字符结尾的。)。如果参数n不小于mm应大于strnlen_s(s2, m)。复制不应发生在重叠对象之间。

在存在运行约束违规的情况下,如果参数s1不是空指针,参数s1max大于0且不大于宏RSIZE_MAX,函数将s1[0]设置为空字符。


参数:
char * restrict s1

指向目标数组的指针,结果字符串将存入该数组。

rsize_t s1max

目标数组中修改的最大字符数。

const char * restrict s2

指向源数组的指针,从该数组中读取字符。

rsize_t n

最多可以添加的字符数。


返回值:

如果不存在运行约束违规,函数返回0;否则函数返回非0值。

函数返回0意味着:从s2指向字符串中请求的所有字符都已成功添加到s1指向字符串的末尾,并且s1中的结果字符串以空字符终止。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
/*安全函数strncat_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>

#define LENGTH 100

int main(void)
{
    char strOne[LENGTH] = "Hello ";
    const char strTwo[] = "Tom and Jack";

    if(!strncat_s(strOne, LENGTH, strTwo, 3))
        puts(strOne);
    
    return 0;
}


输出:

Hello Tom

:使用Visual Studio编译。)


相关内容:
strncat 向字符串添加限定数量字符的函数。
strcat_s 连接字符串的安全函数。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018