这一章说明阵列或记忆区块的工作函式,跟以null结尾的字元和宽字元阵列的特定函式。
[adsense][/adsense]
在记忆区块上操作的函式名称开头会以 ‘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使用。