共用方式為


mbsrtowcs_s

將目前的地區設定的多位元組字元字串,轉換為寬字元字串的表示。 具有安全性增強功能的 mbsrtowcs 版本描述於 CRT 中的安全性功能中。

errno_t mbsrtowcs_s(    size_t * pReturnValue,    wchar_t * wcstr,    size_t sizeInWords,    const char ** mbstr,    size_t count,    mbstate_t * mbstate ); template <size_t size> errno_t mbsrtowcs_s(    size_t * pReturnValue,    wchar_t (&wcstr)[size],    const char ** mbstr,    size_t count,    mbstate_t * mbstate ); // C++ only

參數

  • [輸出] pReturnValue
    已轉換的字元數。

  • [輸出] wcstr
    緩衝區位址,要儲存產生的已轉換寬字元字串。

  • [輸出] sizeInWords
    wcstr 的大小 (字數) (寬字元)。

  • [in、out] mbstr
    要轉換的多位元組字元字串位置的間接指標。

  • [in] count
    儲存在 wcstr 緩衝區的寬字元數目上限,不包括結束的 null 或 _TRUNCATE

  • [in、out] mbstate
    mbstate_t 轉換狀態物件的指標。 如果此值為 null 指標,會使用靜態內部轉換狀態物件。 因為內部 mbstate_t 物件不是安全執行緒,我們建議您一律傳遞您自己的 mbstate 參數。

傳回值

如果轉換成功為零,若失敗則為錯誤碼。

錯誤狀況

傳回值和 errno

wcstr 為 null 指標且 sizeInWords > 0

EINVAL

mbstr 為 null 指標

EINVAL

mbstr 間接指向的字串,包含對目前的地區設定無效的多位元組序列。

EILSEQ

目的緩衝區太小,無法包含已轉換的字串 (除非 count 是 _TRUNCATE;如需詳細資訊,請參閱<備註>)

ERANGE

如果這些情況中的任何一個發生,則會叫用無效參數例外狀況,如參數驗證中所述。 如果允許繼續執行,此函式會傳回錯誤碼,並將 errno 設為如表中所示。

備註

mbsrtowcs_s 函式會使用 mbstate 中所包含的轉換狀態,將 mbstr 間接所指向的多位元組字元字串,轉換為儲存在緩衝區中 wcstr 所指向的寬字元。 除非遇到下列情況之一,否則會繼續為每個字元進行轉換:

  • 遇到多位元組的 null 字元

  • 遇到無效的多位元組字元

  • 儲存在 wcstr 緩衝區的寬字元數目等於 count。

即使發生錯誤,目的地字串 wcstr 也永遠以 null 結束,除非 wcstr 為 null 指標。

如果 count 是特殊值 _TRUNCATE,則 mbsrtowcs_s 會盡量轉換符合目的緩衝區的字串量,同時仍留出空間給 null 結束字元。

如果 mbsrtowcs_s 成功轉換來源字串,它會將轉換後的字串大小 (寬字元) 和 null 結束字元,放入 *pReturnValue (假設 pReturnValue 不是 null 指標)。 即使 wcstr 引數是 null 指標,且可讓您決定所需的緩衝區大小,也會發生這種情況。 請注意,如果 wcstr 為 null 指標,count 會被忽略。

如果 wcstr 不是 null 指標,並由於達到結束的 null 字元而停止轉換,則會將 null 指標指派給 mbstr 所指向的指標物件。 否則會將超過已轉換之最後一個多位元組字元的位址指派給該物件 (如果有的話)。 這可讓後續的函式呼叫,從此呼叫的停止處重新啟動轉換。

如果 mbstate 為 null 指標,會使用程式庫內部 mbstate_t 轉換狀態靜態物件。 由於此內部靜態物件不是安全執行緒,我們建議您傳遞您自己的 mbstate 值。

如果 mbsrtowcs_s 遇到不是目前地區設定中的有效多位元組字元,會將 -1 放入 *pReturnValue,將目的緩衝區 wcstr 設為空字串,將 errno 設為 EILSEQ,並傳回 EILSEQ。

如果 mbstr 和 wcstr 所指的序列重疊,則 mbsrtowcs_s 的行為是未定義。 mbsrtowcs_s 會被目前地區設定的 LC_TYPE 分類影響。

安全性注意事項安全性提示

確定 wcstr 和 mbstr 沒有重疊,而且 count 正確反映要轉換的多位元組字元數。

mbsrtowcs_s 函式的可重新啟動性不同於 mbstowcs_s、_mbstowcs_s_l。 針對相同或其他可重新啟動的函式的後續呼叫,轉換狀態會儲存在 mbstate 中。 混合使用可重新啟動和不可重新啟動之函式的結果不明。 例如,如果使用 mbsrtowcs_s 的後續呼叫,而不是使用 mbstowcs_s.,則應用程式應該使用 mbsrlen 而不是 mbslen。

C++ 利用多載樣板簡化了此函式的使用方式。多載可自動推斷緩衝區長度 (因而不須指定大小引數),也可以使用較新且安全的對應函式,來自動取代不安全的舊函式。 如需詳細資訊,請參閱安全範本多載

例外狀況

如果執行此函式且 mbstate 引數不是 null 指標,那麼只要目前執行緒中沒有函式呼叫 setlocale,mbsrtowcs_s 函式就是安全多執行緒。

.NET Framework 對等用法

不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例

需求

常式

必要的標頭

mbsrtowcs_s

<wchar.h>

請參閱

參考

資料轉換

地區設定

多位元組字元序列的解譯

mbrtowc

mbtowc、_mbtowc_l

mbstowcs_s、_mbstowcs_s_l

mbsinit