wmemcpy, wmemcpy_s
來自 cppreference.com
在標頭檔案 <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