C

wmemmove

wmemmove, wmemmove_s

在头文件中定义
wchar_t * wmemmove(wchar_t * dest,const wchar_t * src,size_t count);(1)(自C95以来)
errno_t wmemmove_s(wchar_t * dest,rsize_t destsz,const wchar_t * src,rsize_t count);(2)(自C11以来)

1)count将由src指向的宽字符数组中的完全连续的宽字符复制到指向的宽字符数组dest。如果count为零,则该功能不执行任何操作。数组可能重叠:复制发生,就好像宽字符被复制到临时宽字符数组,然后从临时数组复制到dest

2)与(1)相同,只是在运行时检测到以下错误并调用当前安装的约束处理函数:

  • src或者dest是空指针

作为所有边界检查函数,wmemmove_s只有在被__STDC_LIB_EXT1__实现定义__STDC_WANT_LIB_EXT1__并且1在包含之前用户定义为整数常量时才能保证可用wchar.h

参数

dest-指向要复制到的宽字符数组的指针
src-指向要复制的宽字符数组的指针
destsz-要写入的最大宽字符数(目标缓冲区的大小)
count-要复制的宽字符数

返回值

1)返回一份副本 dest

2)成功时返回零,错误时返回非零值。此外,在错误,填满整个dst直至并包括不dst+dstsz具有空宽字符,L'\0'(除非dest为空或destsz大于RSIZE_MAX/sizeof(wchar_t)

注意

该函数不区分语言环境,不关注wchar_t其复制的对象的值:复制空值以及无效字符。

示例

#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "en_US.utf8" wchar_t str[] = L"αβγδεζηθικλμνξοπρστυφχψω"; printf("%ls\n", str wmemmove(str+4, str+3, 3 // copy from [δεζ] to [εζη] printf("%ls\n", str }

输出:

αβγδεζηθικλμνξοπρστυφχψω αβγδδεζθικλμνξοπρστυφχψω

参考

  • C11标准(ISO/IEC 9899:2011):

另请参阅

memmovememmove_s(C11)移动一个缓冲区到另一个(功能)
wmemcpywmemcpy_s(C95)(C11)在两个非重叠数组之间复制一定数量的宽字符(函数)

| 用于wmemmove的C ++文档