wcsncat
wcsncat, wcsncat_s
在头文件 | | |
---|---|---|
| (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)count
从指向的宽字符串中追加最宽字符src
,如果将空终止符复制,则停止到指向的字符串的末尾dest
。宽字符src[0]
将替换在结尾处的空终止符dest
。结束符总是附加空终止符(因此函数可能写入的最大宽字符数是count+1
)。
如果目标数组不够大,两者的内容的行为是不确定的str
,并dest
和终止空宽字符。
如果字符串重叠,则行为未定义。
2)与(1)相同,只是此函数可能会破坏目标数组的其余部分(从写入的最后一个字节开始destsz
),并且在运行时检测到以下错误并调用当前安装的约束处理函数:
src
或者dest
是空指针
作为所有边界检查函数,wcsncat_s
只有在被__STDC_LIB_EXT1__
实现定义__STDC_WANT_LIB_EXT1__
并且1
在包含之前用户定义为整数常量时才能保证可用wchar.h
。
参数
dest | - | 指向要附加到的以空字符结尾的宽字符串 |
---|---|---|
src | - | 指向要从中复制的以空字符结尾的宽字符串 |
count | - | 要复制的最大宽字符数 |
destsz | - | 目标缓冲区的大小 |
返回值
1)返回一份副本 dest
2)在成功时返回零,错误时返回非零值。此外,在错误,写入L'\0'
到dest[0]
(除非dest
是空指针或destsz
为零或大于RMAX_SIZE/sizeof(wchar_t)
)。
注意
尽管适合目标缓冲区的截断存在安全风险并因此违反了运行时间约束wcsncat_s
,但可以通过指定count
等于目标数组的大小减1 来获得截断行为:它将复制第一个count
宽字符并追加一如既往的终结者:wcsncat_s(dst, sizeof dst/sizeof *dst, src, (sizeof dst/sizeof *dst)-wcsnlen_s(dst, sizeof dst/sizeof *dst)-1
示例
#include <wchar.h>
#include <stdio.h>
#include <locale.h>
int main(void)
{
wchar_t str[50] = L"Земля, прощай.";
wcsncat(str, L" ", 1
wcsncat(str, L"В добрый путь.", 8 // only append the first 8 wide chars
setlocale(LC_ALL, "en_US.utf8"
printf("%ls", str
}
可能的输出:
Земля, прощай. В добрый
参考
- C11标准(ISO/IEC 9899:2011):
另请参阅
wcscatwcscat_s(C95)(C11) | 将一个宽字符串的副本附加到另一个(函数) |
---|---|
strncatstrncat_s(C11) | 串联一定数量的两个字符串(函数) |
wcscpywcscpy_s(C95)(C11) | 将一个宽字符串复制到另一个(函数) |
| C ++文档wcsncat |