名稱空間
變體
操作

wmemcpy, wmemcpy_s

來自 cppreference.com
< c‎ | string‎ | wide
在標頭檔案 <wchar.h> 中定義
(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) 將 `src` 指向的寬字元陣列中的 `count` 個連續寬字元複製到 `dest` 指向的寬字元陣列。如果物件重疊,則行為未定義。如果 `count` 為零,則函式不執行任何操作。
2)(1),但執行時會檢測到以下錯誤,並呼叫當前安裝的 約束處理程式 函式:
  • `src` 或 `dest` 是空指標
  • `destsz` 或 `count` 大於 RSIZE_MAX/sizeof(wchar_t)
  • `count` 大於 `destsz`(會發生溢位)
  • 源陣列和目標陣列之間會發生重疊
與所有邊界檢查函式一樣,只有當實現定義了 __STDC_LIB_EXT1__ 且使用者在包含 <wchar.h> 之前將 __STDC_WANT_LIB_EXT1__ 定義為整數常量 1 時,才能保證 `wmemcpy_s` 可用。

目錄

[編輯] 引數

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

[編輯] 返回值

1) 返回 `dest` 的副本
2) 成功時返回零,錯誤時返回非零。此外,在錯誤時,用空寬字元 L'\0' 填充整個 `dst` 直到(但不包括)dst+dstsz(除非 `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)
  • 7.29.4.2.3 wmemcpy 函式 (p: 431)
  • K.3.9.2.1.3 wmemcpy_s 函式 (p: 641)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.24.4.2.3 wmemcpy 函式 (p: 377)

[編輯] 另請參閱

在兩個可能重疊的陣列之間複製一定數量的寬字元
(函式) [編輯]
從一個字串複製一定數量的字元到另一個字串
(函式) [編輯]
C++ 文件 關於 wmemcpy