wcsrtombs
Konvertieren von Breitzeichen in die Multibyte-Zeichenfolgendarstellung. Eine sicherere Version dieser Funktion ist verfügbar; siehe wcsrtombs_s
.
Syntax
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
Parameter
mbstr
Der Adressspeicherort der resultierenden konvertierten Multibyte-Zeichenfolge.
wcstr
Indirekter Zeiger auf den Speicherort der Breitzeichenfolge, die konvertiert werden soll.
count
Die Anzahl der zu konvertierenden Zeichen.
mbstate
Ein Zeiger auf ein mbstate_t
-Konvertierungszustandsobjekt.
Rückgabewert
Gibt die Anzahl der erfolgreich konvertierten Bytes zurück, wobei das abschließende NULL-Byte (falls vorhanden) nicht eingeschlossen ist. Andernfalls wird bei einem Fehler -1 zurückgegeben.
Hinweise
Die Funktion wcsrtombs
konvertiert eine Zeichenfolge aus Breitzeichen, beginnend beim angegebenen Konvertierungsstatus, der in mbstate
enthalten ist, von den Werten, auf die in wcstr
indirekt gezeigt wird, in die Adresse von mbstr
. Die Konvertierung wird für jedes Zeichen fortgeführt, bis ein abschließendes NULL-Breitzeichen gefunden wird, ein nicht übereinstimmendes Zeichen gefunden wird oder das nächste Zeichen den in count
enthaltenen Grenzwert übersteigen würde. Wenn wcsrtombs
das Breitzeichen NULL (L'\0') erkennt, entweder vor oder bei count
, wird es in ein 8-Bit-0-Zeichen konvertiert und beendet.
Folglich endet die Multibyte-Zeichenfolge bei mbstr
nur dann auf NULL, wenn wcsrtombs
während der Konvertierung ein Breitzeichen NULL findet. Wenn die Sequenzen, auf die von wcstr
und mbstr
verwiesen wird, überlappen, ist das Verhalten von wcsrtombs
nicht definiert. wcsrtombs
wird von der LC_TYPE-Kategorie des aktuellen Gebietsschemas beeinflusst.
Die wcsrtombs
Funktion unterscheidet sich von wcstombs
der _wcstombs_l
Neustartbarkeit. Der Konvertierungszustand wird für nachfolgende Aufrufe der gleichen oder anderer Funktionen, die neu gestartet werden können, in mbstate
gespeichert. Wenn sowohl Funktionen, die neu gestartet werden können, als auch Funktionen, die nicht neu gestartet werden könnnen, verwendet werden, sind die Ergebnisse undefiniert. Beispiel: Eine Anwendung würde wcsrlen
anstelle von wcsnlen
verwenden, wenn ein nachfolgender Aufruf von wcsrtombs
anstelle von wcstombs
verwendet würde.
Wenn das mbstr
-Argument NULL
ist, gibt wcsrtombs
die erforderliche Größe der Zielzeichenfolge in Bytes zurück. Wenn mbstate
NULL ist, wird der interne Konvertierungsstatus mbstate_t
verwendet. Wenn die Zeichensequenz wchar
keine entsprechende Multibyte-Zeichendarstellung enthält, wird ein -1 zurückgegeben, und der errno
Wert wird auf EILSEQ
. festgelegt.
In C++ hat diese Funktion eine Vorlagenüberladung, mit der die neuere, sichere Entsprechung dieser Funktion aufgerufen wird. Weitere Informationen finden Sie unter Secure Template Overloads.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Ausnahmen
Die wcsrtombs
Funktion ist multithreadsicher, solange keine Funktion im aktuellen Thread aufruft setlocale
, während diese Funktion ausgeführt wird und die mbstate
Null nicht ist.
Beispiel
// 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.
Anforderungen
Routine | Erforderlicher Header |
---|---|
wcsrtombs |
<wchar.h> |
Siehe auch
Datenkonvertierung
Gebietsschema
Interpretation von Multibytezeichensequenzen
wcrtomb
wcrtomb_s
wctomb
, _wctomb_l
wcstombs
, _wcstombs_l
mbsinit