|
Proposé par Eric Mittelette |
wchar _t buf[16];
int ret;
ret = MultiByteToWideChar(CP_ACP, 0, p, -1, buf, sizeof(buf));
printf("%d\n", ret);
|
|
La bonne réponse est : On a oublié que la taille de buf est en UNICODE on doit indiquer la taille en nombre de caractères UNICODE ie diviser sizeof(buf) par la taille d’un élément, le premier par exemple.
Dans ce code on divise la taille du buffer par la taille du premier élément, afin de ne pas ouvrir la porte à un potentiel buffer overrun car la taille des caractères est ici en UNICODE. C’est un bug assez courant dès lors que l’on localise du code.
Dans la documentation ce paramètre est commenté ainsi :
« Specifies the size, in wide characters » il faut donc compter le nombre de caractères « wide » et non pas le nombre d’octets !
|
|
Proposé par Eric Mittelette |
wchar_t buf[16];
int ret;
ret = MultiByteToWideChar(CP_ACP, 0, p, -1,buf, sizeof(buf)/sizeof(buf[0]));
printf("%d\n", ret);
|
Pour aller plus loin Le règlement |
Comment jouer ? |
Liste des gagnants |
|