Wchar

xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009 - 2 sept. 2005 à 21:48
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 sept. 2005 à 23:46
j'ai un objet de type ( const wchar_t * ). Je voudrais passer cet objet en paramètre d'une fonction f( const char * ).

Existe-t-il une fonction de conversion standard ?

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 21:53
Sous Windows:
WideCharToMultiByte
MultiByteToWideChar

ciao...
BruNews, MVP VC++
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 sept. 2005 à 21:55
Connais tu une fonction portable ? Mon application est destinée à linux et windows ?

Je comprend pas la différence entre multibyte char et wide char d'ailleurs.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 22:11
la 1ere passe de unicode vers char, l'autre l'inverse.

Je ne connais pas d'équivalent en C, existe ?

S'il y a la même chose chez Unix tu mets entre des #ifdef...

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 sept. 2005 à 22:33
Tu as essayé wcstombs/mbstowcs?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 22:42
ah oui semble bon ça.

ciao...
BruNews, MVP VC++
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 sept. 2005 à 22:47
wchar_t * locale_to_wchar(char * str)
{
wchar_t * ptr;
size_t s;

/* first arg == NULL means 'calculate needed space' */
s=mbstowcs(NULL, str, 0);

/* a size of -1 is triggered by an error in encoding; never
happen in ISO-8859-* locales, but possible in UTF-8 */
if(s == -1)
return(NULL);

/* malloc the necessary space */
if((ptr=(wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
return(NULL);

/* really do it */
mbstowcs(ptr, str, s);

/* ensure NULL-termination */
ptr[s]=L'\0';

/* remember to free() ptr when done */
return(ptr);
}

char * wchar_to_locale(wchar_t const * str)
{
char * ptr;
size_t s;

/* first arg == NULL means 'calculate needed space' */
s=wcstombs(NULL, str, 0);

/* a size of -1 means there are characters that could not
be converted to current locale */
if(s == -1)
return(NULL);

/* malloc the necessary space */
if((ptr=(char *)malloc(s + 1)) == NULL)
return(NULL);

/* really do it */
wcstombs(ptr, str, s);

/* ensure NULL-termination */
ptr[s]='\0';

/* remember to free() ptr when done */
return(ptr);
}
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 sept. 2005 à 22:47
Ca semble fonctionner....
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 sept. 2005 à 22:48
La constness n'est pas bonne, penser à la corriger avant utilisation.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 sept. 2005 à 22:50
Et voila ce que BruNews adore, une fonction qui renvoie un pointeur à libérer. C'est vrai que c'est pas joli!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 23:04
J'ADORE LES BELLES FUITES MEMOIRE !!!

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 sept. 2005 à 23:11
Si ca se trouve l'appelant connait la taille de la chaine, mais ta fonction de conversion va la calculer sans te demander (premier appel à wcstombs/mbstowcs) puis va faire la conversion, c'est long
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 sept. 2005 à 23:36
J'avoue ne pas avoir cherché à comprendre ce code qui est tiré d'un site dont j'ai perdu l'URL.

J'ai préféré passer toute mon appli en wchar_t, plutot que d'insérer ce genre de m**** dans mon code.

Cela dit, je vois pas de fuite de mémoire si l'utilisateur libère comme indiqué le pointeur retourné.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 sept. 2005 à 23:46
Bien sur, mais on peut considérer qu'il est facile de l'oublier si on n'y pense pas tout de suite. Quand on cherche la fuite, difficile de voir d'ou ca vient quand on voit pas de malloc. Faut alors chercher dans toutes les fonctions qui allouent elles même
0
Rejoignez-nous