Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Convertit une chaîne de caractères larges dans sa représentation de chaîne de caractères multioctets. Version des améliorations de wcsrtombs sécurité décrites dans les fonctionnalités de sécurité du CRT.
Syntaxe
errno_t wcsrtombs_s(
size_t *pReturnValue,
char *mbstr,
size_t sizeInBytes,
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcsrtombs_s(
size_t *pReturnValue,
char (&mbstr)[size],
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
); // C++ only
Paramètres
pReturnValue
Taille en octets de la chaîne convertie, y compris la marque de fin Null.
mbstr
Adresse d'une mémoire tampon pour la chaîne de caractères multioctets convertie résultante.
sizeInBytes
Taille en octets de la mémoire tampon mbstr.
wcstr
Pointe vers la chaîne de caractères larges à convertir.
count
Nombre maximal d’octets à stocker dans la mbstr mémoire tampon, ou _TRUNCATE.
mbstate
Un pointeur vers un objet d'état de conversion mbstate_t.
Valeur retournée
Zéro si l'opération a réussi, un code d'erreur en cas d'échec.
| Condition d’erreur | Valeur de retour et errno |
|---|---|
mbstr est NULL et sizeInBytes> 0 |
EINVAL |
wcstr est NULL |
EINVAL |
La mémoire tampon de destination est trop petite pour contenir la chaîne convertie (à moins que count ait la valeur _TRUNCATE ; consultez les notes ci-dessous) |
ERANGE |
Si l’une de ces conditions se produit, l’exception de paramètre non valide est appelée comme décrit dans la validation des paramètres. Si l'exécution est autorisée à continuer, la fonction retourne un code d'erreur et définit errno, comme indiqué dans le tableau.
Notes
La fonction wcsrtombs_s convertit une chaîne de caractères larges vers laquelle pointe wcstr en caractères multioctets stockés dans la mémoire tampon vers laquelle pointe mbstr, en utilisant l’état de conversion indiqué dans mbstate. La conversion se poursuit pour chaque caractère jusqu'à ce qu'une des conditions suivantes soit remplie :
Un caractère large null est rencontré
Un caractère large qui ne peut pas être converti est rencontré
Le nombre d'octets stockés dans la mémoire tampon
mbstrest égal àcount.
La chaîne de destination est toujours terminée par null (même s’il existe une erreur).
S’il count s’agit de la valeur _TRUNCATEspéciale, wcsrtombs_s convertit autant de chaînes que dans la mémoire tampon de destination, tout en laissant la place pour un terminateur Null.
Si wcsrtombs_s elle convertit correctement la chaîne source, elle place la taille en octets de la chaîne convertie, y compris le terminateur Null, dans *pReturnValue (fourni pReturnValue n’est pas NULL). La taille est calculée même si l’argument mbstr est NULL; il permet de déterminer la taille de mémoire tampon requise. Si mbstr c’est NULLle cas, count est ignoré.
Si wcsrtombs_s vous rencontrez un caractère large, il ne peut pas convertir en caractère multioctet, il place -1 dans , définit la mémoire tampon de destination sur *pReturnValueune chaîne vide, définit errno sur EILSEQet renvoie EILSEQ.
Si les séquences pointées par wcstr et mbstr se chevauchent, le comportement de wcsrtombs_s n'est pas défini. wcsrtombs_s est affecté par la catégorie LC_TYPE des paramètres régionaux actuels.
Important
Vérifiez que wcstr et mbstr ne se chevauchent pas, et que count reflète fidèlement le nombre de caractères larges à convertir.
La wcsrtombs_s fonction diffère de , _wcstombs_s_l par wcstombs_ssa capacité de redémarrage. L'état de la conversion est stocké dans mbstate pour les appels suivants à la même ou à d'autres fonctions redémarrables. Les résultats ne sont pas définis quand l'utilisation de fonctions redémarrables est combinée avec l'utilisation de fonctions non redémarrables. Par exemple, une application utiliserait wcsrlen plutôt que wcslen si un appel ultérieur à wcsrtombs_s était utilisé à la place de wcstombs_s.
En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d’avoir à spécifier un argument taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalentes plus récentes et sécurisées. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Exceptions
La fonction wcsrtombs_s est multithread-safe tant qu’aucune fonction du thread actif n’appelle setlocale pendant l’exécution de cette fonction et que mbstate a la valeur Null.
Exemple
// crt_wcsrtombs_s.cpp
//
// 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;
errno_t err;
mbstate_t mbstate;
// Reset to initial shift state
::memset((void*)&mbstate, 0, sizeof(mbstate));
err = wcsrtombs_s(&countConverted, mbString, MB_BUFFER_SIZE,
&wcsIndirectString, MB_BUFFER_SIZE, &mbstate);
if (err == EILSEQ)
{
printf( "An encoding error was detected in the string.\n" );
}
else
{
printf( "The string was successfully converted.\n" );
}
}
The string was successfully converted.
Spécifications
| Routine | En-tête requis |
|---|---|
wcsrtombs_s |
<wchar.h> |
Voir aussi
Conversion de données
Paramètres régionaux
Interprétation des séquences de caractères multioctets
wcrtomb
wcrtomb_s
wctomb, _wctomb_l
wcstombs, _wcstombs_l
mbsinit