mbrlen
決定的位元組數目在字串中,如果多位元組字元的重新啟動的功能需要,使用目前的地區設定時。
size_t mbrlen(
const char *str,
size_t maxSize,
mbstate_t mbstate
);
參數
str
Null 結尾字串。maxSize
字串,不包含結束的 null 字元的大小上限。mbstate
位移轉換的狀態。
傳回值
如果字串是小於maxSize個字元的長度,每個函式傳回的字元數str,不包括 「 終端機NULL。 如果字串大於maxSize個字元的長度,然後maxSize會傳回。
0
多位元組字元,其代表下一步的計數或較少的位元組,完成NULL寬字元。> 0
如果下一步的計數或較少的位元組完成有效的多位元組字元,則傳回的值會是完成多位元組字元的位元組數目。-1
如果下一個計數位元組變為不完整的多位元組,並在處理完所有的數個位元組。-2
如果發生編碼錯誤,在此情況下的下一步的計數或較少的位元組不會完整且正確多位元組字元,值 errno 值會是 EILSEQ 和模稜兩可的轉換狀態。
備註
mbrlen函式會判斷從屬的多位元組的字元序列的位元組數目str,就一定要具有的重新啟動多位元組字元的功能,檢查最多maxSize個位元組。 mbstate_t引數mbstate用來追蹤的位移狀態。 若為 NULL, mbrlen會使用內部的靜態mbstate_t物件。 它相當於:
mbrtowc(NULL, str, maxSize, mbstate)
除非時大小寫的mbstate是NULL, mbrlen會依賴其靜態內部mbstate_t摸索位移狀態的物件。
mbrlen函式會不同於_mbclen,mblen _mblen_l由其重新。 轉換狀態儲存在mbstate進行後續的呼叫至相同或其他可重新啟動的功能。 混合的重新啟動的和即可函式使用時,結果是未定義。 例如,應用程式會使用wcsrlen而不是wcslen,如果的後續呼叫wcsrtombs而不是使用wcstombs.
泛用文字常式對應
TCHAR。H 常式 |
_UNICODE & 未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
n/a |
n/a |
mbrlen |
n/a |
需求
常式 |
所需的標頭 |
---|---|
mbrlen |
<wchar.h> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
// crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
size_t Example(const char * pStr)
{
size_t charLen = 0;
size_t charCount = 0;
mbstate_t mbState;
memset(&mbState, 0, sizeof(mbState));
while ((charLen = mbrlen(pStr, MB_CUR_MAX, &mbState)) != 0 &&
charLen != (size_t)-1 && charLen != (size_t)-2)
{
pStr += charLen;
charCount++;
}
return (charCount);
}
int main( void )
{
size_t charCount = 0;
const char *pSample = "Every good boy does fine.";
charCount = Example(pSample);
printf("%s\nLength: %d\n", pSample, charCount);
}