Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 wcstombsder _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