Newsgroup: it.comp.lang.c
Titolo: Copiare data in vettore

Salve a tuti, ho provato con scarsi risultati
ha copiare la data in una stringa  con il comando
date:
strcpy(stringa,system("date"))
il compilatore djgpp mi avverte di un cast:
 warning: passing argument 2 of 'strcpy'
makes pointer from integer wi thout a cast.
cosa significa?  e come posso risolvere?
Mi potete dare un consiglio?
Grazie
Ciao

 cosa significa?  e come posso risolvere?
La funzione system() non restituisce la stringa prodotta dalla console 
che ha ricevuto il comando. Per ottenere l'ora in c, devi usare le 
funzioni dichiarate in time.h, in questo caso ti servira' ctime() che 
restituisce un puntatore a char partendo da una variabile time_t, che 
puoi ottenere con time(NULL).
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 makes pointer from integer wi thout a cast.
senza cast converti 0 in const char* ovvero in un puntatore. Il problema
non e' tanto l'assenza del cast tanto quanto che 0 non punta
(ovviamente) a nessuna stringa e questo risulta in un comportamento
indefinito. L'applicazione puo' crashare ad esempio.
Leggiti anche la documentazione di strcpy.
Ora system("date") sul tuo sistema immagino mostri la data come stringa
a video, ma sicuramente il valore di ritorno della funzione e' un intero
e non una stringa.
Detto questo sul mio sistema system("date") mi mostra la data (solo
data, non ora) e mi chiede di inserirne una nuova.
Non so come dirtelo ma io per rispondere a questo messaggio ho perso 3
minuti. Tu invece non ne hai perso nemmeno uno per leggere la
documentazione di system. Francamente non sono piu' disposto ad aiutarti
se prima non noto che ti sforzi tu da solo di capire e ti documenti.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Mi potete dare un consiglio?
Dipende da cosa vuoi fare. Il codice che hai mostrato era solo una prova,
oppure ti interessa proprio l'output del comando 'date'?
Non riesco a immaginare un motivo per cui un programma C debba eseguire il
comando 'date', che per altro non è sempre presente e ha comportamento
diverso da sistema a sistema.
Naturalmente, su ogni piattaforma esistono procedure per eseguire comandi di
sistema o altri programmi e leggerne l'output.
Max

[...]
... vi ringrazio per la pazienza.
devo memorizzare in un file la data corrente.
Con date non e possibile , proverò seguendo
i vostri consigli.
Ciao

 strcpy(stringa,system("date"))
Ciao,
 ?????????????????????????????
system esegue una shell e ti ritorna il codice di uscita.
Il prototipo e':
int system(const char *string);
 Ciao
 Federico

 strcpy(stringa, 0);
non sarebbe un problema (ne in C ne in C++).
il problema e' che non sai at-compile-time che il numero e' 0, 0
potrebbe essere il valore at-run-time (ed anche questo non e' detto), ma
at-compile time non sai il valore. Sai solo che e' un intero.
quindi il comilatore deve convertire un intero in un puntatore e ti
avvisa del pericolo. In C++ il compilatore invece di una warning darebbe
un errore.
nel caso specifico di 0, se tu mettessi uno zero a mano al posto della
chiamata a system le cose cambiano, diventa 0 at-compile-time e quindi
non c'e' problema. 0 ha senso che venga convertito in un puntatore (ed
in C++ e' legale convertire solo lo 0 infatti).
il problema e' che potrebbe essere:
strcpy(stringa, 2);
o qualsiai altro numero che non puo' essere convertito in C++ e che in C
per quanto possa essere convertito (per lo meno in C89) non ha senso.
Tutto cio' che sa il compilatore e' che e' un intero con valore ignoto
at-compile-time che tu vuoi trattare come puntatore e ti avverte: ehi,
non mi hai messo un cast, sei sicuro di quello che stai facendo?
tu infatti non sei sicuro.


 strcpy(stringa, 0);
non sarebbe un problema (ne in C ne in C++).
il problema e' che non sai at-compile-time che il numero e' 0, 0
potrebbe essere il valore at-run-time (ed anche questo non e' detto), ma
at-compile time non sai il valore. Sai solo che e' un intero.
quindi il comilatore deve convertire un intero in un puntatore e ti
avvisa del pericolo. In C++ il compilatore invece di una warning darebbe
un errore.
nel caso specifico di 0, se tu mettessi uno zero a mano al posto della
chiamata a system le cose cambiano, diventa 0 at-compile-time e quindi
non c'e' problema. 0 ha senso che venga convertito in un puntatore (ed
in C++ e' legale convertire solo lo 0 infatti).
il problema e' che potrebbe essere:
strcpy(stringa, 2);
o qualsiai altro numero che non puo' essere convertito in C++ e che in C
per quanto possa essere convertito (per lo meno in C89) non ha senso.
Tutto cio' che sa il compilatore e' che e' un intero con valore ignoto
at-compile-time che tu vuoi trattare come puntatore e ti avverte: ehi,
non mi hai messo un cast, sei sicuro di quello che stai facendo?
tu infatti non sei sicuro.
Tommaso


 strcpy(stringa, 0);
non sarebbe un problema (ne in C ne in C++).
il problema e' che non sai at-compile-time che il numero e' 0, 0
potrebbe essere il valore at-run-time (ed anche questo non e' detto), ma
at-compile time non sai il valore. Sai solo che e' un intero.
quindi il comilatore deve convertire un intero in un puntatore e ti
avvisa del pericolo. In C++ il compilatore invece di una warning darebbe
un errore.
nel caso specifico di 0, se tu mettessi uno zero a mano al posto della
chiamata a system le cose cambiano, diventa 0 at-compile-time e quindi
non c'e' problema. 0 ha senso che venga convertito in un puntatore (ed
in C++ e' legale convertire solo lo 0 infatti).
il problema e' che potrebbe essere:
strcpy(stringa, 2);
o qualsiai altro numero che non puo' essere convertito in C++ e che in C
per quanto possa essere convertito (per lo meno in C89) non ha senso.
Tutto cio' che sa il compilatore e' che e' un intero con valore ignoto
at-compile-time che tu vuoi trattare come puntatore e ti avverte: ehi,
non mi hai messo un cast, sei sicuro di quello che stai facendo?
tu infatti non sei sicuro.
Tommaso
