這一章說明陣列或記憶區塊的工作函式,跟以null結尾的字元和寬字元陣列的特定函式。
在記憶區塊上操作的函式名稱開頭會以 ‘mem’ 和 ‘wmem’命名(像是memcpy
跟wmemcpy)並且都會有一個引數指定記憶區塊的大小(位元組和寬字元)來操作,這些函式的陣列引數會傳回型態
void *
或wchar_t的值,因為風格的關係,使用'mem'的函式其陣列元素會以"位元組"來參考,你可以傳遞任何種類的指標給函式,而
sizeof運算子在計算引數的大小值時很有用,
‘wmem’函式的參數型態會是wchar_t *,這些函式不是任何東西都能用而是只有這個型態的陣列可以使用。
相對之下,在字串和寬字元字串上操作的函式名稱開頭會分別以 ‘str’跟 ‘wcs’命名(像是strcpy與
wcscpy)並且會尋找結束字串的空字元而不需要明確的引數大小來傳遞,(有些函式接受最大長度的指定,但它們也會檢查過早的空字元結束,)這些函式的陣列引數和傳回值的型態分別是
char *
跟wchar_t *,陣列的元素會以
“characters”跟 “wide characters”來參考。
在許多情況下,一個函式會有 ‘mem’和‘str’/‘wcs’兩個版本,依據正確的情況使用較適合的那一個,當你的程式處理陣列或是記憶區塊時,可以使用 ‘mem’函式,另一方面除非你已先知道字串的長度,否則當你處理空字元結束的字串時使用’str’/’wcs’函式通常會比較方便, ‘wmem’函式應該使用在已知大小的寬字元陣列。
一些記憶體和字串函式會以單一字元做為引數,由於在做為參數使用的時候型態char的值會自動地促使成為型態
int的值,因此正在考慮這些函式的參數使用int型態來宣告,寬字元函式的情況也是類似:單一寬字元的參數型態是
wint_t而不是
wchar_t,這在很多實作上是不需要的因為
wchar_t大到不能自動被促成,但
ISO C標準也不需要這樣的型態wint_t使用。
下一節:字串長度,上一節:字串的表示,這一章:字串和陣列的工具