wcsncat, wcsncat_s
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <wchar.h>
  | 
||
| (1) | ||
|   wchar_t *wcsncat( wchar_t *dest, const wchar_t *src, size_t count );  | 
 (C95 起)  (C99 前)  | 
|
|   wchar_t *wcsncat( wchar_t *restrict dest, const wchar_t *restrict src, size_t count );  | 
(C99 起) | |
|   errno_t wcsncat_s( wchar_t *restrict dest, rsize_t destsz, const wchar_t *restrict src, rsize_t count );  | 
(2) | (C11 起) | 
1) 后附来自 
src 所指向的宽字符串的至多 count 个宽字符,到 dest 所指向的字符串末尾,若找到空字符则停止。宽字符 src[0] 替换位于 dest 末尾的空终止符。始终后附终止空字符到末尾(故函数可写入的最大宽字符数是 count+1 )。 若目标数组没有对于 
dest 和 src 的内容加上终止空宽字符足够的空间,则行为未定义。 若字符串重叠则行为未定义。
2) 同 (1) ,除了此函数可以可用未指定值破坏目标数组的剩余部分(从最后写入宽字符到 
destsz ),以及在运行时检测下列错误,并调用当前安装的制约处理函数:
-  
src或dest为空指针 -  
destsz或count为零或大于 RSIZE_MAX/sizeof(wchar_t) -  
dest的首destsz个宽字符中无空宽字符 -  会出现截断: 
count与src长度的较小者,会超出dest的空终止符和destsz之间的可用空间。 - 源与目标字符串之间会出现重叠
 
-  
 - 同所有边界检查函数, 
wcsncat_s仅若实现定义了 __STDC_LIB_EXT1__ ,且用户在包含wchar.h前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。 
参数
| dest | - | 指向要后附到的空终止宽字符串的指针 | 
| src | - | 指向作为复制来源的宽字符数组的指针 | 
| count | - | 要复制的最大宽字符数 | 
| destsz | - | 目标缓冲区的大小 | 
返回值
1) 返回 
dest 的副本。2) 成功时返回零。错误时返回非零。错误时,亦写入 L'\0' 到 dest[0] (除非 
dest 为空指针,或 destsz 为零或大于 RSIZE_MAX/sizeof(wchar_t) )。注意
尽管截断以适应目标缓冲区是安全风险,从而是 wcsncat_s 的运行时制约违规,还是可以通过指定 count 等于目标数组大小减一获取截断行为:这将一如往常地复制首 count 个宽字符并后附空终止符: wcsncat_s(dst, sizeof dst/sizeof *dst, src, (sizeof dst/sizeof *dst)-wcsnlen_s(dst, sizeof dst/sizeof *dst)-1); 。
示例
运行此代码
可能的输出:
Земля, прощай. В добрый
引用
- C11 standard (ISO/IEC 9899:2011):
 
- 7.29.4.3.2 The wcsncat function (p: 432-433)
 
- K.3.9.2.2.2 The wcsncat_s function (p: 643-644)
 
- C99 standard (ISO/IEC 9899:1999):
 
- 7.24.4.3.2 The wcsncat function (p: 378-379)
 
参阅
|    (C95)(C11)  | 
   将一个宽字符串的副本后附于另一个  (函数)  | 
|    (C11)  | 
   连接两个字符串的一定数量字符  (函数)  | 
|    (C95)(C11)  | 
   将一个宽字符串复制给另一个  (函数)  |