非常教程

C参考手册

字符串 | Strings

wmemmove

在头文件<wchar.h>中定义

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是空指针
  • destszcount大于RSIZE_MAX/sizeof(wchar_t)
  • count大于destsz(会发生溢出)

作为所有边界检查函数,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):
    • 7.29.4.2.4 wmemmove函数(p: 432)
    • K.3.9.2.1.4 wmemmove_s函数(p: 642)
  • C99标准(ISO/IEC 9899:1999):
    • 7.24.4.2.4 wmemmove函数(p: 378)

另请参阅

memmovememmove_s(C11)

移动一个缓冲区到另一个(功能)

wmemcpywmemcpy_s(C95)(C11)

在两个非重叠数组之间复制一定数量的宽字符(函数)

| 用于wmemmove的C ++文档

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。