跳轉到內容

C 程式設計/wchar.h

來自華夏公益教科書,開放的書籍,為開放的世界

wchar.hC 標準庫 中的一個頭檔案。它是 1995 年對 C 程式語言標準擴充套件的一部分。它包含擴充套件的多位元組和寬字元實用程式。標準標頭檔案 <wchar.h> 包含在對寬流執行輸入和輸出操作時。它也可以用來操作寬字串。[1]

寬字元

[編輯 | 編輯原始碼]

C 是一種程式語言,它是在 7 位 ASCII 碼為主流字元集的環境中開發的。因此,從那時起,8 位位元組就成為最常見的編碼單位。但是,當為國際目的開發軟體時,它必須能夠表示不同的字元。例如,應該提供用於表示印度語、漢語、日語書寫系統的字元編碼方案。透過使用僅僅是統一位元組數的字元,可以消除處理這種不同多位元組字元的不便。ANSI C 提供了一種型別,允許將可變寬度字元作為稱為寬字元的統一大小的資料物件進行操作。寬字元集是已存在字元集的超集,包括 7 位 ASCII。[2]

宣告和定義

[編輯 | 編輯原始碼]

標準標頭檔案 wchar.h 包含一些常量的定義或宣告。

NULL
它是一個空指標常量。它永遠不會指向一個真實的物件。
WCHAR_MIN
它表示 wchar_t 型別下限或最小值。
WCHAR_MAX
它表示 wchar_t 型別上限或最大值。
WEOF
它定義了 wint_t 型別的返回值,但該值不對應於擴充套件字元集中的任何成員。WEOF 表示字元流的結尾、檔案結尾 (EOF) 或錯誤情況。[3]

資料型別

[編輯 | 編輯原始碼]
mbstate_t
mbstate_t 型別的變數包含從一個函式呼叫到另一個函式呼叫所需的關於轉換狀態的所有資訊。
size_t
它是一個大小/計數型別,儲存 sizeof 運算子的結果或返回值。
wchar_t
wchar_t 型別的物件可以儲存一個寬字元。它也用於宣告或引用寬字元和寬字串。
wint_t
此型別是一個整數型別,可以儲存與擴充套件字元集成員相對應的任何值。它可以儲存 wchar_t 型別的全部值以及宏 WEOF 的值。此型別不受整數提升的影響。

寬字元字串函式

[編輯 | 編輯原始碼]
名稱 註釋
wchar_t *wcscat(wchar_t *s1, const wchar_t *s2); 將 s2 指向的寬字串複製到 s1 指向的寬字串的末尾。
wchar_t *wcschr(const wchar_t *s, wchar_t c); 在寬字串 s 中搜索寬字元 c。
int wcscmp(const wchar_t *s1, const wchar_t *s2); 比較 s1 和 s2 指向的兩個寬字串。
int wcscoll(const wchar_t *s1, const wchar_t *s2); 使用當前區域設定的整理順序比較兩個寬字串 s1 和 s2。
size_t wcscspn(const wchar_t *s1, const wchar_t *s2); 返回 s1 的最大初始段的長度,該段完全由不來自 s2 的程式碼組成。
wchar_t *wcscpy(wchar_t *s1, const wchar_t s2); 將 s2 指向的寬字串複製到 s1 指向的位置。
size_t wcslen(const wchar_t *s); 返回 s 指向的寬字串中寬字元的數量(不包括終止空寬字元)。
wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2); 搜尋 s1 中第一個與 s2 中的任何一個元素相等的元素。
size_t wcsspn(const wchar_t *s1, const wchar_t *s2); 返回 s1 的最大初始段的長度,該段完全由來自 s2 的程式碼組成。

寬字元陣列函式

[編輯 | 編輯原始碼]
名稱 註釋
wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n); 搜尋 s 指向的、大小為 n 的陣列中的第一個等於 c 的元素。
int wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n); 比較 s1 和 s2 指向的兩個陣列中的連續元素,直到找到不相等的元素。
wchar_t *wmemcpy(wchar_t *s1, const wchar_t *s2, size_t n); 將 s2 指向的陣列中的 n 個寬字元複製到 s1 指向的陣列中的寬字元。如果 s1 和 s2 中的物件重疊,則行為未定義。
wchar *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n); 即使陣列 s1 和 s2 中的物件重疊,也像 wmemcpy 函式一樣工作。
wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n) 將 s 指向的陣列中的前 n 個元素設定為寬字元 c。

[4]

轉換函式

[編輯 | 編輯原始碼]
名稱 註釋
wint_t btowc(int c); 將 c 轉換為等效的寬字元後返回結果,如果發生錯誤則返回 WEOF。
int wctob(wint_t c); 返回 c 的一個位元組或多位元組等效項,如果發生錯誤則返回 WEOF。

寬字元 I/O 函式

[編輯 | 編輯原始碼]
名稱 註釋
wint_t fgetwc(FILE *stream); 從檔案讀取一個寬字元。
wchar_t *fgetws(wchar_t *s, int n, FILE *stream); 從檔案讀取一個寬字元字串。
wint_t fputwc(wchar_t *c, FILE *stream); 將一個寬字元寫入檔案。
int fputws(const wchar_t *s, FILE *stream); 將一個寬字串寫入檔案。
int fwprintf(FILE *stream, const wchar_t format,...); 首先生成格式化的文字,然後將其寫入檔案。
int fwscanf(FILE *stream, const wchar_t format,...); 從檔案讀取格式化的文字。
wint_t getwc(FILE*stream); 從檔案讀取一個寬字元。
wint_t getwchar() 從 stdin 讀取寬字元。
wint_t putwc(wchar_t c, FILE *stream); 將一個寬字元寫入檔案。
wint_t putwchar(wchar_t c); 將寬字元寫入 stdout。
華夏公益教科書