C

wmemcpy

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 |