Newsgroup: it.comp.lang.c
Titolo: char tempo = (char)lpSystemTime.wDay;

Salve a tutti.. mi serve poter convertire la variabile "lpSystemTime.wday"
in un char.. e non so proprio come fare.. pensavo di fare cosě 
"char tempo = (char)lpSystemTime.wDay;", ma mi da errore.... ecco il
codice: 
--------------------------------------------------
SYSTEMTIME lpSystemTime;
GetSystemTime(&lpSystemTime);
printf("\nGiorno: %02d"), lpSystemTime.wDay);		
char tempo = (char)lpSystemTime.wDay;
strcpy(riga, tempo);
----------------------------------------------------
P.S. la dichiarazione dopo al codice la posso fare.. non č un problema.
Grazie a tutti,
Michele
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 P.S. la dichiarazione dopo al codice la posso fare.. non è un problema.
Anche leggere un buon manuale di "C" non sarebbe un problema :-)
Sicuramente ci troveresti scritto che il cast e' meglio non farlo se
non si sa molto bene cosa si sta facendo (e sicuramente non e' questo
il caso).
C:\>iao Angelo


 C:>iao Angelo
Grazie Ciao,
Michele


 casting, me lo studio subito!!
CVD... :-)
char pippo = '\0';
pippo = (char)lpSystemTime.wDay;
Questo e' un esempio di cast, ovvero si dice al compilatore di ignorare
il tipo sulla destra e di assegnare il valore comunque a quello che sta'
a sinistra anche se e' il e' tipo diverso.
Questa ' una operazione molto pericolosa soprattutto se si converte
qualcosa di piu' grande (WORD che e' sinonimo di short int o di unsigned
short int, non ricordo) in qualcosa di piu' piccolo (un char). In questo
caso probabilmente non sarebbe successo niente (i giorni del mese al
massimo sono 31 e un char almeno fino a 127 tiene), ma in generale e' una
pessima idea fare qualcosa solo perche' cosi' il compilatore non si
lagna...
C:\>iao Angelo


 C:>iao Angelo
Ciao,
Michele


 char tempo = '';


 errate le dimensioni..
Beh sizeof(lpSystemTime) e' 256 sizeof(char) e' 1 :-)
C:\>iao Angelo


Angelo Paolitto wrote:
-CUT-
Grazie per la spiegazione, l'ho letta con piacere :)
La mia ultima domanda è questa:
char tempo = (char)lpSystemTime.wDay;
Ok così è sbagliato.. come sarebbe giusto fare il cast in questo caso?
Grazie ancora per la disponibilità Ciao,
Michele


 (almeno spero che riga sia di tipo char*) e un char.
Nope, il primo argomento non puo` essere const visto che la funzione ci
scrive sopra ;)
char *strcpy(char * restrict s1, const char * restrict s2);
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non puoi convincerli, confondili.

 Ok così è sbagliato.. come sarebbe giusto fare il cast in questo caso?
Non e` "sbagliato", non fa quello che ti aspetti. Quel cast dice "prendi
il valore contenuto in lpSystemTime.wDay e interpreta questo valore come
un char".
Se  lpSystemTime.wDay ==  9, allora  anche tempo  == 9.  tempo *non*  e`
una  stringa, e`  solo  un  numero (che  puo`  essere interpretato  come
carattere).
Se decidi di usare tempo come un intero:
printf("%d\n", tempo);
vedrai che ha lo stesso valore di lpSystemTime.wDay, se cerchi di usarlo
come carattere:
printf("%c\n", tempo);
il valore numerico di tempo  verra` intepretato come codice (tipicamente
ASCII), ed il carattere corrispondente verra` stampato (9 in ASCII e` la
tabulazione ,'\t').
Se  vuoi avere  una stringa,  allora  non puoi  usare un  solo char,  ti
servira` un  array. Nel caso di  lpSystemTime.wDay == 9,  l'array dovra`
essere fatto cosi`: {'9', '\0'}.
Questo programmino potrebbe aiutarti a capire
#include <stdio.h>
int main() {
	int day = 9;
	char tempo;
	char str[4];
	int i;
	printf("day = %d\n", day);
	tempo = (char)day;
	printf("tempo (come carattere) = '%c'\n", tempo);
	printf("tempo (come intero) = %d\n", tempo);
	snprintf(str, 4, "%d", day);
	printf("tempo (come stringa) = %s\n", str);
 
	for (i = 0; i < 4; i++) {
		printf("str[%d] = %c (come intero = %d)\n", i, str[i], str[i]);
		if (str[i] == '\0')
			break;
	}
 
	return 0;
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Dicono che  il cane sia  il miglior  amico dell'uomo. Secondo me  non e`
vero. Quanti dei vostri amici avete fatto castrare, recentemente?

Kronos wrote:
Grazie Kronos, a buon rendere ;)


 	snprintf(str, 4, "%d", day);
snprintf undeclarated indetifieree.. che libreria ci vuole??
Ciao


 
Sotto linux basta  #include <stdio.h> , altrove non so.
ciao,
g.

 g.


 snprintf undeclarated indetifieree.. che libreria ci vuole??
E` dichiarata in stdio.h, ma il compilare deve supportare il C99. Puoi
usare sprintf:
sprintf(str, "%d", day);
ma non hai il controllo sulla lunghezza massima della stringa
convertita.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Carpe diem, quam minimum credula postero. (Q. Horatius Flaccus)

usare sprintf:
oppure aggiungere direttamente una implementazione di snprintf
nel tuo progetto.
ciao
 sbirish 

 scrive sopra ;)
Mica dico mica cazzate solo su icold :-)
C:\>iao Angelo
P.S. E' scappata...
