Conversione di stringhe

di il
8 risposte

Conversione di stringhe

Ciao!
Ho una stringa contenente un numero (un double) dichiarata come TCHAR. Devo passarla ad atof, ma atof prende char... Vorrei capire come mai non funziona, e cosa devo fare per farlo funzionare. Qualcuno può dare un'occhiata?
Sotto c'è il codice.

Grazie!!
igm

#include <windows.h> // per TCHAR
#include <stdlib.h> // per atof
#include <ctype.h> // solo per gets

main() {
	double EFL;
	TCHAR szBuffer[100] = TEXT("20");

	// come devo trasformare TCHAR affinché atof funzioni correttamente?
	// atof sta operando solo sulla prima cifra di szBuffer!!!

	EFL = atof(szBuffer)/3;

	sprintf(szBuffer, "The result is %5.4f", EFL);
	puts(szBuffer);

	gets(szBuffer);

    return 0;
}

8 Risposte

  • Re: Conversione di stringhe

    Se sei in MBCS atof va bene. se sei in UNICODE devi usare _wtof
  • Re: Conversione di stringhe

    _wtof funziona!

    GRAZIE GRAZIE GRAZIE!
  • Re: Conversione di stringhe

    Il problema è che non hai capito perche funziona
  • Re: Conversione di stringhe

    No, no l'ho capito! ))
    Mi sto studiano il Petzold (Programming Windows, 5th Edition) e nella prima parte spiega la gestione delle stringhe UNICODE, ma non mi era tutto chiaro. La definizione di _wtof mi ha fatto capire qualcosa di più nella differenza tra caratteri a 8 bit e a 16 bit.. Comunque se vuoi darmi una breve illuminazione l'accetto ben volentieri
  • Re: Conversione di stringhe


    Ok iniziamo. TCHAR è un tipo di carattere a doppio senso. Dipende dal modo di compilare il progetto.
    Se MBCS (MultiByte character set) TCHAR equivale a char quindi il tuo atof andrebbe benissimo.
    SE UNICODE, TCHAR vale wchar_t quindi serve _wtof
    Per ovviare a queste problematiche e rendere il codice compilabile con qualsiasi tipo di impostazione progetto invece di usare atof oppure _wtof devi usare la funzione _ttof che a seconda del tipo di progetto viene tradotta automaticamente in atof oppure _wtof.
  • Re: Conversione di stringhe

    Dato che si parla di massimi sistemi, ne approfitto per approfondire.. Ho visitato il link . Ho due domande:
    1) Petzold costruisce tutto il suo libro (che ormai è abbastanza datato) dicendo di usare UNICODE. Vedo che però a tutt'oggi la situazione non è monolitica. Cos'è più usuale utilizzare tra UNICODE e MBCS? Cosa conviene? Ci sono altre possibilità?
    2) E infine, una lacuna vecchia.. Che differenza c'è tra "char*" e "const char*"?

    Thanks a lot!
  • Re: Conversione di stringhe

    Sul punto 1 sono daccordo. Aveva senso programmare in MBCS per win95,98. Su sistemi NT dove la libreria centrale è ntdll.dll tutto è in UNICODE quindi qualsiasi chiamata API in MBCS viene convertita in UNICODE per essere passato a questa dll.

    differenza tra char * e const char *
    
    char s1[10] = "prova";
    const char s2[10] = "prova2";
    
    s1 è modificabile cioè posso cambiare il suo contenuto invece alla s2 no.
  • Re: Conversione di stringhe

    Il punto 2 era di una banalità assoluta ... Grazie ancora
Devi accedere o registrarti per scrivere nel forum
8 risposte