建議使用 Visual Studio 2017

wcsrtombs

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

將寬字元字串轉換成它的多位元組字元的字串表示。 更安全的版本,此函式是可使用;請參閱wcsrtombs_s

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

參數

[輸出] mbstr
所產生的轉換多位元組字元字串的位址的位置。

[in] wcstr
間接指向的寬字元字串轉換的位置。

[in] count
要轉換的字元數。

[in] mbstate
mbstate_t 轉換狀態物件的指標。

傳回的位元組數成功轉換,不含 null 終止 null 位元組 (如果有的話),否則為-1,如果發生錯誤。

wcsrtombs函式會將從指定的轉換狀態中所包含的寬字元字串轉換mbstate,在指向的值間接wcstr,放入位址mbstr。 為每個字元,才會繼續進行轉換︰ 遇到 null 終止的寬字元時,發生非對應的字元時之後,或下一個字元會超過限制包含在count。 如果wcsrtombs之前或期間遇到寬字元的 null 字元 (L '\0')count發生時,會將其轉換成 8 位元 0 並停止。

因此,在多位元組字元字串mbstrnull 結束才wcsrtombs轉換期間遇到的寬字元的 null 字元。 如果 wcstrmbstr 所指向的序列重疊,wcsrtombs 的行為不明。 wcsrtombs 受到目前地區設定之 LC_TYPE 分類的影響。

wcsrtombs函式不同於wcstombs、 _wcstombs_l能力。 針對相同或其他可重新啟動的函式的後續呼叫,轉換狀態會儲存在 mbstate 中。 混合使用可重新啟動和不可重新啟動之函式的結果不明。 例如,應用程式會使用wcsrlenwcsnlen,如果的後續呼叫wcsrtombs而不是使用wcstombs

如果mbstr引數是NULLwcsrtombs傳回所需的大小,以位元組為單位的目的字串。 如果mbstate為 null,內部mbstate_t會使用轉換狀態。 如果字元序列 wchar 沒有對應的多位元組字元表示法,則傳回 -1,並將 errno 設為 EILSEQ

在 C++ 中,這個函式具有樣板多載,可以叫用比這個函式更新且更安全的相對版本。 如需詳細資訊,請參閱 Secure Template Overloads

wcsrtombs函式是多執行緒安全,因為沒有目前的執行緒中的函式呼叫setlocale時正在執行,此函式和mbstate不是 null。

// crt_wcsrtombs.cpp  
// compile with: /W3  
// This code example converts a wide  
// character string into a multibyte  
// character string.  
  
#include <stdio.h>  
#include <memory.h>  
#include <wchar.h>  
#include <errno.h>  
  
#define MB_BUFFER_SIZE 100  
  
int main()  
{  
    const wchar_t   wcString[] =   
                    {L"Every good boy does fine."};  
    const wchar_t   *wcsIndirectString = wcString;  
    char            mbString[MB_BUFFER_SIZE];  
    size_t          countConverted;  
    mbstate_t       mbstate;  
  
    // Reset to initial shift state  
    ::memset((void*)&mbstate, 0, sizeof(mbstate));  
  
    countConverted = wcsrtombs(mbString, &wcsIndirectString,  
                               MB_BUFFER_SIZE, &mbstate); // C4996  
    // Note: wcsrtombs is deprecated; consider using wcsrtombs_s  
    if (errno == EILSEQ)  
    {  
        printf( "An encoding error was detected in the string.\n" );  
    }  
    else   
    {  
        printf( "The string was successfuly converted.\n" );  
    }  
}  

The string was successfuly converted.  

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

常式必要的標頭
wcsrtombs<wchar.h>

資料轉換
地區設定
多位元組字元序列的解譯
wcrtomb
wcrtomb_s
wctomb、 _wctomb_l
wcstombs、 _wcstombs_l
mbsinit

顯示: