Namespaces
Variants

wmemmove, wmemmove_s

From cppreference.net
< c ‎ | string ‎ | wide
ヘッダーで定義 <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) src が指すワイド文字配列から、連続する count 個のワイド文字を dest が指すワイド文字配列に正確にコピーします。 count がゼロの場合、関数は何も行いません。配列は重複している可能性があります:コピーは、ワイド文字が一時的なワイド文字配列にコピーされ、その一時配列から dest にコピーされるかのように行われます。
2) (1) と同様ですが、以下のエラーが実行時に検出され、現在インストールされている constraint handler 関数を呼び出します:
  • src または dest がnullポインタの場合
  • destsz または count RSIZE_MAX / sizeof ( wchar_t ) より大きい場合
  • count destsz より大きい場合(オーバーフローが発生する)
すべての境界チェック付き関数と同様に、 wmemcpy_s は、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <wchar.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証されます。

目次

パラメータ

dest - コピー先のワイド文字配列へのポインタ
src - コピー元のワイド文字配列へのポインタ
destsz - 書き込む最大ワイド文字数(宛先バッファのサイズ)
count - コピーするワイド文字数

戻り値

1) dest のコピーを返す
2) 成功時はゼロを返し、エラー時は非ゼロを返します。また、エラー時には、 dst から dst + dstsz の手前まで( dst がnullの場合、または destsz RSIZE_MAX / sizeof ( wchar_t ) より大きい場合を除く)をnullワイド文字 L ' \0 ' で埋めます。

注記

この関数はロケールに依存せず、コピーする wchar_t オブジェクトの値に注意を払いません:ヌル文字および無効な文字も同様にコピーされます。

#include <locale.h>
#include <stdio.h>
#include <wchar.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);
}

出力:

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

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.29.4.2.4 wmemmove関数 (p: TBD)
  • K.3.9.2.1.4 wmemmove_s関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.29.4.2.4 wmemmove関数 (p: TBD)
  • K.3.9.2.1.4 wmemmove_s関数 (p: TBD)
  • 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)

関連項目

バッファを別のバッファに移動する
(関数)
2つの重複しない配列間で指定された量のワイド文字をコピーする
(関数)
C++ documentation for wmemmove