wmemcpy_s
wmemcpy, wmemcpy_s
在头文件 | | |
---|---|---|
| (1) | |
wchar_t * wmemcpy(wchar_t * dest,const wchar_t * src,size_t count); | (自C95以来)(直到C99) | |
wchar_t * wmemcpy(wchar_t * restrict dest,const wchar_t * restrict src,size_t count); | (自C99以来) | |
errno_t wmemcpy_s(wchar_t * restrict dest,rsize_t destsz,const wchar_t * restrict src,rsize_t count); | (2) | (自C11以来) |
1)count
将由src
指向的宽字符数组中的完全连续的宽字符复制到指向的宽字符数组dest
。如果对象重叠,则行为未定义。如果count
为零,则该功能不执行任何操作。
2)与(1)相同,只是在运行时检测到以下错误并调用当前安装的约束处理函数:
src
或者dest
是空指针
作为所有边界检查函数,wmemcpy_s
只有在被__STDC_LIB_EXT1__
实现定义__STDC_WANT_LIB_EXT1__
并且1
在包含之前用户定义为整数常量时才能保证可用wchar.h
。
参数
dest | - | 指向要复制到的宽字符数组的指针 |
---|---|---|
src | - | 指向要复制的宽字符数组的指针 |
count | - | 要复制的宽字符数 |
destsz | - | 要写入的最大宽字符数(目标缓冲区的大小) |
返回值
1)返回一份副本 dest
2)在成功时返回零,错误时返回非零值。此外,在错误,填满整个dst
直至并包括不dst+dstsz
具有空宽字符,L'\0'
(除非dest
为空或destsz
大于RSIZE_MAX/sizeof(wchar_t)
)
注意
这个函数对字节串的模拟strncpy
不是strcpy
。
该函数不区分语言环境,不关注wchar_t
其复制的对象的值:复制空值以及无效字符。
示例
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
wchar_t from1[] = L"नमस्ते";
size_t sz1 = sizeof from1 / sizeof *from1;
wchar_t from2[] = L"Բարև";
size_t sz2 = sizeof from2 / sizeof *from2;
wchar_t to[sz1 + sz2];
wmemcpy(to, from1, sz1 // copy from1, along with its null terminator
wmemcpy(to + sz1, from2, sz2 // append from2, along with its null terminator
setlocale(LC_ALL, "en_US.utf8"
printf("Wide array contains: "
for(size_t n = 0; n < sizeof to / sizeof *to; ++n)
if(to[n])
printf("%lc", to[n]
else
printf("\\0"
printf("\n"
}
可能的输出:
Wide array contains: नमस्ते\0Բարև\0
参考
- C11标准(ISO/IEC 9899:2011):
另请参阅
wmemmovewmemmove_s(C95)(C11) | 在两个可能重叠的数组之间复制一定数量的宽字符(函数) |
---|---|
strncpystrncpy_s(C11) | 将一定数量的字符从一个字符串复制到另一个字符串(函数) |
| C ++文档wmemcpy |