PDA

Visualizza la versione completa : [C++] uso dei puntatori in funzioni


pavimento
24-03-2009, 16:55
Dovrei trasformare un char* in un wchar_t* in c++.
Il tutto sembra funzionare, ma non sono certo che sia il modo migliore (soprattutto su come ritorno il risultato e sull'uso dei puntatori).
Qualcuno può consigliarmi?



wchar_t* MultibyteToUnicode(char* multibyte)
{
size_t sl = strlen(multibyte); // Ottengo lunghezza della stringa multibyte
if(sl < 0) return NULL; // Se la lungheza della stringa è < 0 ritorno NULL

size_t wsl = mbstowcs(NULL,multibyte, sl + 1); //memoria necessaria
if(wsl == -1) return NULL; // Se mbstowcs fallisce ritorno NULL

wchar_t* unicode = new wchar_t[wsl + 1];

size_t wsl2 = mbstowcs(unicode,multibyte, sl + 1); // Effettuo la conversione
if(wsl2 == -1) return NULL; // Se la conversione fallisce ritorno NULL

return unicode; // Restituisco la stringa unicode
}

shodan
24-03-2009, 18:21
Rimane allocata unicode in caso la seconda chiamata a mbstowcs fallisca.
Per il resto mi sembra tutto a posto (anche se io avrei usato le std::string per le conversioni).

pavimento
24-03-2009, 20:33
Ti ringrazio :)

Sul libro che sto provando a seguire,se ho capito bene, c'è scritto che non si dovrebbe ritornare un puntatore ad una variabile locale perché ptrebbe dare problemi.

Il modo in cui ho fatto io ritorna un puntatore a una variabile locale.
Da qui il dubbio sulla correttezza del codice.

MacApp
24-03-2009, 21:04
Originariamente inviato da pavimento
Ti ringrazio :)

Sul libro che sto provando a seguire,se ho capito bene, c'è scritto che non si dovrebbe ritornare un puntatore ad una variabile locale perché ptrebbe dare problemi.

Il modo in cui ho fatto io ritorna un puntatore a una variabile locale.
Da qui il dubbio sulla correttezza del codice.

in unicode NON c'e' l'indirizo di una variabile locale, ma l'indirizzo di una variabile allocata con new [] (e sara' cura del chiamante liberarla con delete []).

Loading