名稱空間
變體
操作

wmemmove, wmemmove_s

來自 cppreference.com
< 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),但會在執行時檢測以下錯誤並呼叫當前安裝的約束處理函式
  • srcdest 是空指標
  • destszcount 大於 RSIZE_MAX / sizeof(wchar_t)
  • count 大於 destsz(會發生溢位)
與所有邊界檢查函式一樣,只有當實現定義了 __STDC_LIB_EXT1__ 並且使用者在包含 <wchar.h> 之前將 __STDC_WANT_LIB_EXT1__ 定義為整數常量 1 時,才能保證 wmemcpy_s 可用。

目錄

[編輯] 引數

dest - 指向要複製到的寬字元陣列的指標
src - 指向要複製的寬字元陣列的指標
destsz - 要寫入的最大寬字元數(目標緩衝區的大小)
count - 要複製的寬字元數

[編輯] 返回值

1) 返回 dest 的副本
2) 成功時返回零,錯誤時返回非零。此外,在錯誤時,會用空寬字元 L'\0' 填充整個 dst 直到(但不包括)dst+dstsz(除非 dest 為空或 destsz 大於 RSIZE_MAX/sizeof(wchar_t)

[編輯] 注意

此函式不區分割槽域設定,並且不關注所複製的 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)

[編輯] 另請參閱

將一個緩衝區移動到另一個緩衝區
(函式) [編輯]
在兩個不重疊的陣列之間複製一定數量的寬字元
(函式) [編輯]
C++ 文件wmemmove