Udostępnij za pośrednictwem


wcstombs_s, _wcstombs_s_l

Konwertuje sekwencja znaków szerokości odpowiedniej sekwencji znaków wielobajtowych.Wersja z wcstombs, _wcstombs_l z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w 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

Parametry

  • [out]pReturnValue
    Liczba znaków konwertowane.

  • [out]mbstr
    Adres buforu dla wynikowy ciąg znaków wielobajtowych przekonwertowane.

  • [w]sizeInBytes
    Rozmiar w bajtach mbstr buforu.

  • [w]wcstr
    Punkty do konwertowanego łańcucha szerokich znaków.

  • [w]count
    Maksymalna liczba znaków szerokości mają być przechowywane w mbstr buforu, nie włączając kończącego znaku null lub _TRUNCATE.

  • [w]locale
    Ustawienia regionalne, aby użyć.

Wartość zwracana

Zero, jeśli kończy się pomyślnie, kod błędu w przypadku awarii.

Warunek błędu

Zwraca wartość ierrno

mbstris NULL and sizeInBytes > 0

EINVAL

wcstrjestNULL

EINVAL

Bufor docelowy jest zbyt mały, aby pomieścił przekonwertowanym łańcuchem (chyba że count jest _TRUNCATE; Zobacz uwagi poniżej)

ERANGE

Jeśli występuje którykolwiek z tych warunków, wyjątek nieprawidłowy parametr jest wywoływany, jak opisano w Sprawdzanie poprawności parametru .Jeśli wykonanie może w dalszym ciągu, funkcja zwraca kod błędu i ustawia errno jak wskazano w tabeli.

Uwagi

wcstombs_s Funkcja konwertuje ciąg znaków szerokości wskazywanej przez wcstr do znaków wielobajtowych, przechowywane w buforze wskazywanej przez mbstr.Konwersja będzie kontynuowane dla każdego znaku, dopóki jeden z tych warunków jest spełniony:

  • Po napotkaniu null szerokich znaków

  • Po napotkaniu szerokiego znaku, który nie może zostać przekonwertowany

  • Liczba bajtów, przechowywane w mbstr buforu równa się count.

Ciąg docelowego jest zawsze zakończony zerem (nawet w przypadku wystąpienia błędu).

Jeśli count jest specjalna wartość _TRUNCATE, następnie wcstombs_s konwertuje tyle ciąg będą mieści się w bufor docelowy, pozostawiając nadal miejsca na null terminator.

Jeśli wcstombs_s pomyślnie konwertuje ciąg źródłowy umieszcza rozmiar w bajtach przekonwertowanym łańcuchem, łącznie z null terminator do *pReturnValue (pod warunkiem pReturnValue nie jest NULL).Dzieje się tak nawet wtedy, gdy mbstr argument jest NULL i daje możliwość określenia wymagany rozmiar buforu.Note that if mbstr is NULL, count is ignored.

Jeśli wcstombs_s napotka szerokiego znaku nie może przekonwertować znaków wielobajtowych, umieszcza 0 w *pReturnValue, ustawia bufor docelowy ciąg pusty, ustawia errno do EILSEQi zwraca EILSEQ.

Jeśli sekwencji wskazywanej przez wcstr i mbstr nachodzą na siebie, zachowanie wcstombs_s jest niezdefiniowane.

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

Zapewnić, że wcstr i mbstr nie nakładają się i że count poprawnie odzwierciedla numer szerokości znaków do konwertowania.

wcstombs_swykorzystuje bieżące ustawienia regionalne dla wszelkich zachowanie zależnego od ustawień regionalnych; _wcstombs_s_ljest taka sama, jak wcstombs z wyjątkiem, że korzysta z ustawień regionalnych, przekazany w zamian.Aby uzyskać więcej informacji, zobacz Regionalne.

W języku C++ korzystając z tych funkcji jest uproszczona poprzez overloads szablonu; overloads można automatycznie rozpoznać długość buforu (eliminując konieczność należy określić argument rozmiar) i automatycznie można zastąpić starszych, które nie są bezpieczne funkcje z ich odpowiednikami nowsze, bezpieczne.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

wcstombs_s

<stdlib.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

Ten program ilustruje zachowanie wcstombs_s funkcji.

// 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);
    }
}
  

Odpowiednik w programie .NET Framework

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

Zobacz też

Informacje

Konwersja danych

Regionalne

_mbclen, mblen, _mblen_l

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

wctomb_s, _wctomb_s_l

WideCharToMultiByte