Udostępnij za pośrednictwem


mbstowcs, _mbstowcs_l

Konwertuje ciąg znaków wielobajtowych sekwencję odpowiedniej szerokości znaków.Bardziej bezpieczne wersje tych funkcji są dostępne w mbstowcs_s, _mbstowcs_s_l.

size_t mbstowcs(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count 
);
size_t _mbstowcs_l(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t mbstowcs(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _mbstowcs_l(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

Parametry

  • [Brak] wcstr
    Adres sekwencji znaków szerokości.

  • [w] mbstr
    Adres sekwencji null zakończone znaki wielobajtowe.

  • [in] count
    Maksymalna liczba znaków wielobajtowych do konwersji.

  • [w] locale
    Ustawienia regionalne do użycia.

Wartość zwracana

Jeśli mbstowcs pomyślnie konwertuje ciąg źródłowy zwraca numer konwertowane znaki wielobajtowe.Jeśli wcstr argument jest NULL, funkcja zwraca ciąg docelowy wymagany rozmiar (w szerokości znaków).Jeśli mbstowcs napotka nieprawidłową znaków wielobajtowych zwraca –1.Jeśli wartość zwracana jest count, wide znakowy ciąg nie jest zakończony znakiem null.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Zapewnienia, że wcstr i mbstr nie pokrywają się i że count poprawnie odzwierciedla liczbę znaków wielobajtowych do konwersji.

Uwagi

mbstowcs Funkcja konwertuje do maksymalnej liczby count znaki wielobajtowe wskazywanego przez mbstr ciąg odpowiedniej szerokości znaków, które są określone przez bieżące ustawienia regionalne.Przechowuje wynikowy ciąg znaków wide pod adresem reprezentowane przez wcstr*.* Wynik jest podobna do serii połączeń w celu mbtowc.Jeśli mbstowcs napotka znak null jednobajtowe (\0), przed lub po count występuje, konwertuje znak null jest znakiem znak null (L '\0') i zatrzymuje się.Tym samym wide znakowy ciąg w wcstr jest zakończony znakiem null tylko wtedy, gdy napotka znak null podczas konwersji.Jeśli sekwencje wskazywanego przez wcstr i mbstr nakładające się, zachowanie jest niezdefiniowane.

Jeśli wcstr argument jest NULL, mbstowcs zwraca liczbę szerokości znaków, które byłyby wynikiem konwersji, nie w tym znakiem null.Ciąg źródłowy musi być zakończony znakiem null uzyskać prawidłową wartość zwracaną.Wynikowy ciąg znaków szerokości być zakończony znakiem null, należy dodać 1 do wartości zwracanych.

Jeśli mbstr argument jest NULL, lub, jeśli count jest >INT_MAX, obsługi nieprawidłowy parametr jest wywoływany, zgodnie z opisem w Sprawdzanie poprawności parametru .Jeśli wykonanie może być kontynuowana, numer błędu jest ustawiona na EINVAL i funkcja zwraca wartość -1.

mbstowcsużywa bieżących ustawień regionalnych dla wszelkich zachowań zależne od ustawień lokalnych. _mbstowcs_l jest identyczne, chyba że to korzysta z ustawień regionalnych przekazany w zamian.Aby uzyskać więcej informacji, zobacz Regionalne.

W języku programowania C++ funkcje te mają przeciążenia szablonu, które wywołują nowsze, bezpieczne odpowiedniki tych funkcji.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.

Wymagania

Procedura

Wymagany nagłówek

mbstowcs

<stdlib.h>

_mbstowcs_l

<stdlib.h>

Dodatkowe informacje o zgodności – zobacz: Zgodność we Wprowadzeniu.

Przykład

// crt_mbstowcs.c
// compile with: /W3
// illustrates the behavior of the mbstowcs function

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main( void )
{
    size_t size;
    int nChar = 2; // number of characters to convert
    int requiredSize;

    unsigned char    *pmbnull  = NULL;
    unsigned char    *pmbhello = NULL;
    char* localeInfo;
    
    wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters
    wchar_t *pwc;

    /* Enable the Japanese locale and codepage */
    localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");
    printf("Locale information set to %s\n", localeInfo);
    
    printf( "Convert to multibyte string:\n" );

    requiredSize = wcstombs( NULL, pwchello, 0); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    printf("  Required Size: %d\n", requiredSize);

    /* Add one to leave room for the null terminator. */
    pmbhello = (unsigned char *)malloc( requiredSize + 1);
    if (! pmbhello)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    if (size == (size_t) (-1))
    {
        printf("Couldn't convert string. Code page 932 may"
                " not be available.\n");
        return 1;
    }
    printf( "  Number of bytes written to multibyte string: %u\n",
            (unsigned int) size );
    printf( "  Hex values of the " );
    printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",
            pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );
    printf( "  Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");

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

    /* Assume we don't know the length of the multibyte string.
     Get the required size in characters, and allocate enough space. */

    requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996
    /* Add one to leave room for the NULL terminator */
    pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
    if (! pwc)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996
    if (size == (size_t) (-1))
    {
       printf("Couldn't convert string--invalid multibyte character.\n");
    }
    printf( "  Characters converted: %u\n", (unsigned int)size );
    printf( "  Hex value of first 2" );
    printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );
    free(pwc);
    free(pmbhello);
}
  

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.

Zobacz też

Informacje

Konwersja danych

Regionalne

Interpretacja wielobajtowych sekwencji znaków

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar