formater un basic_string comme sprintf
Bonjour,
Je suis sur un probleme que je n'arrive pas a resoudre, lorsque j'execute le code suivant, en retour j'ai toujours "D".
Code:
1 2
|
string_format("%s", "D:\\rep1\\rep2\\rep3\\test.exe"); |
Le code de string format est le suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
generic_string Compiler::string_format(const char * fmt, ...)
{
const int BUF_SIZE = 2048;
char textString[BUF_SIZE] = { '\0'};
va_list args;
va_start ( args, fmt );
vsnprintf ( textString, BUF_SIZE, fmt, args );
va_end ( args );
//=> meme a ce niveau la j'obtiens "D" en unicode ou pas en unicode
#ifdef UNICODE
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
const TCHAR * destW = wmc->char2wchar(textString, CP_ACP));
generic_string retStr = destW;
#else
generic_string retStr = textString;;
#endif
return retStr;
} |
La class unicode utilisé fontionne tres bien , je l'utilise partout dans mon code, ca ne viens pas de la, je pense que va_list et va_start on du mal en windows 64bit et en UNICODE.
J'ai essaye plusieurs code trouvés sur le net et ca me renvoi toujours la meme valeur
generic_string est défini comme tel:
Code:
1 2
|
typedef std::basic_string<TCHAR> generic_string; |
je ne voit vraiment pas d'ou cela peut provenir.
Si vous avez une idée.
Merci de votre aide.