共用方式為


wcstombs_s _wcstombs_s_l

將一連串的寬字元轉換為相對應的一連串的多位元組字元。 版本的wcstombs _wcstombs_l中所述的安全性增強功能與安全性功能,則在 CRT 中

errno_t wcstombs_s(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count 
);
errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
errno_t wcstombs_s(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count 
); // C++ only
template <size_t size>
errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
); // C++ only

參數

  • [out] pReturnValue
    轉換的字元數。

  • [out] mbstr
    產生的已轉換的多位元組字元字串緩衝區的位址。

  • [in]sizeInBytes
    以位元組為單位的大小mbstr的緩衝區。

  • [in] wcstr
    寬字元字串,以指定須轉換的點。

  • [in] count
    最大的寬字元數目,並儲存在mbstr緩衝區,不包含結束的 null 字元,或_TRUNCATE

  • [in] locale
    若要使用地區設定。

傳回值

零,如果執行成功、 失敗的錯誤代碼。

錯誤狀況

傳回值,errno

mbstris NULL and sizeInBytes > 0

EINVAL

wcstr 為 NULL

EINVAL

目的緩衝區是太小無法包含轉換後的字串 (除非count是_TRUNCATE。 請參閱下方註解)

ERANGE

如果上述條件,就會發生,如所述,會叫用參數不正確的例外狀況參數驗證 。 如果執行,則允許繼續執行,則函數會傳回一個錯誤碼,並設定errno表格中所示。

備註

wcstombs_s函式將轉換為所指的寬字元字串wcstr為儲存在緩衝區所指的多位元組字元mbstr。 轉換會繼續每個字元,直到滿足這些條件其中一項:

  • 在遇到 null 的寬字元

  • 在遇到無法轉換寬字元

  • 儲存在中的位元組數目mbstr緩衝等於count。

目的地字串一定是空字元 (甚至是錯誤)。

如果count是特殊值_TRUNCATE,然後wcstombs_s盡可能將字串轉換容納到目的緩衝區,同時仍留出空間給 null 結束字元。

如果wcstombs_s成功轉換來源的字串,它會將大小以位元組為單位的轉換後的字串,包含 null 結束字元,到*pReturnValue (提供pReturnValue不是NULL)。 發生這種情形即使mbstr引數是NULL ,並提供方法,以判斷所需的緩衝區大小。 Note that if mbstr is NULL, count is ignored.

如果wcstombs_s遇到廣泛的字元不能轉換為多位元組的字元,它會將 0 放*pReturnValue,將目的緩衝區設定為空字串,設定errno到EILSEQ,並傳回EILSEQ。

如果所指的序列wcstr和mbstr重疊,行為的wcstombs_s尚未定義。

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

確保wcstr和mbstr不會重疊,且該count正確地反映出要轉換的寬字元數目。

wcstombs_s使用目前的地區設定的任何地區設定相關的行為。 _wcstombs_s_l是相同的wcstombs不同之處在於它所使用的地區設定中傳遞。 如需詳細資訊,請參閱 地區設定

在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載

需求

常式

所需的標頭

wcstombs_s

<stdlib.h>

其他的相容性資訊,請參閱相容性在簡介中。

範例

此程式會說明的行為wcstombs_s函式。

// crt_wcstombs_s.c
// This example converts a wide character
// string to a multibyte character string.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t   i;
    char      *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

    // Conversion
    wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE, 
               pWCBuffer, (size_t)BUFFER_SIZE );

    // Output
    printf("   Characters converted: %u\n", i);
    printf("    Multibyte character: %s\n\n",
     pMBBuffer );

    // Free multibyte character buffer
    if (pMBBuffer)
    {
    free(pMBBuffer);
    }
}
  

.NET Framework 對等用法

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

請參閱

參考

資料轉換

地區設定

_mbclen,mblen _mblen_l

mbstowcs _mbstowcs_l

mbtowc _mbtowc_l

wctomb_s _wctomb_s_l

WideCharToMultiByte