Newsgroup: it.comp.lang.c
Titolo: Esempi asctime

Salve a tutti, ho trovato in rete qualche cosa sull'uso
di asctime , ma non ho capito come usare questa
funzione .Mi sapete fare degli esempi di uso di asctime?
e possibile copiare in una stringa i dati "partoriti" da questa
funzione?
c'era un commento su un sito che diceva:
Benché la funzione asctime fornisca la modalità
più immediata per stampare un tempo o una data,
la flessibilità non fa parte delle sue caratteristiche.
Grazie a tutti
Ciao

 la flessibilità non fa parte delle sue caratteristiche.
Certo perchè restituisce solo una stringa che rappresenta
data e ora.
Per maggior flessibilità (stile printf) c'è la strftime().

Anonimo ha scritto:

Dato che la cosa e' a tema col tuo precedente thread bastava continuare 
in quello, senza aprirne uno nuovo. Comunque rispondendo alla tua 
domanda... come e' dichiarata la funzione? E' dichiarata cosi':
char *asctime(const struct tm *timeptr);
che significa che la funzione restituisce un char*, ovvero un puntatore 
a char. Questo puntatore, stando a quello che dice man asctime, punta a 
un array di char contenente (nel formato leggibile) la data passata come 
argomento alla funzione. Quindi nulla ti vieta di utilizzare questo 
puntatore nelle funzioni di output o di copiare la stringa puntata in 
una nuova stringa.
char *adesso;
struct tm adesso=gmtime(time(NULL));
strcpy(adesso,asctime(&tm_adasso));
o per farlo piu' semplice:
char *adesso;
strcpy(adesso,ctime(time(NULL));
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 strcpy(adesso,ctime(time(NULL));
Piccolo errore: ctime() richiede un puntatore a time_t. Come correggere 
la cosa lo lascio a te.


[...]
... nn funzia, sarň io?
data.c: In function 'main':
data.c:13: error: conflicting types for 'asctime'
c:/djgpp/include/time.h:48: error: previous declaration of 'asctime' wa
 here
data.c:14: error: conflicting types for 'localtime'
c:/djgpp/include/time.h:53: error: previous declaration of 'localtime'
as here
???
Ciao

 strcpy(adesso,asctime(&tm_adasso));
Altro errore >:-| oggi sono proprio fuso...
usa localtime invece di gmtime


 ha scritto nel messaggio
news:zTATe.30349$4g5.2...@news4.tin.it...

... ti ringrazio, anch'io sono fuso , oggi.
...provo.
Ciao

[...]
data.c:15: error: conflicting types for 'adesso'
data.c:14: error: previous declaration of 'adesso' was here
data.c:15: warning: passing argument 1 of 'localtime' makes pointer from
integer
 without a cast
data.c:15: error: invalid initializer
data.c:16: error: 'tm' undeclared (first use in this function)
data.c:16: error: (Each undeclared identifier is reported only once
data.c:16: error: for each function it appears in.)
data.c:16: error: incompatible type for argument 1 of 'strcpy'
nn funzia. :-) :-|
Ciao

 c:/djgpp/include/time.h:48: error: previous declaration of 'asctime' wa
Se magari fai vedere il codice....:-)

Anonimo ha scritto:

hai incluso time.h?


 hai incluso time.h?
... si. serve qualche altre include?
Ciao


 ... si. serve qualche altre include?
Boh.. direi string.h per trattare le stringhe.
data.c:15: error: conflicting types for 'adesso'
data.c:14: error: previous declaration of 'adesso' was here
Questo significa che hai dichiarato adesso due volte con due tipi diversi.
data.c:15: warning: passing argument 1 of 'localtime' makes pointer from
integer without a cast
Prima per sbaglio ho scritto
struct tm adesso;
adesso=localtime(...);
Invece localtime() ritorna un puntatore a struct tm, quindi devi 
dichiarare 'struct tm *adesso' e assegnare a quello (rimuovi le vecchie 
dichiarazioni).
data.c:15: error: invalid initializer
data.c:16: error: 'tm' undeclared (first use in this function)
data.c:16: error: (Each undeclared identifier is reported only once
data.c:16: error: for each function it appears in.)
data.c:16: error: incompatible type for argument 1 of 'strcpy'
A questi ci pensiamo dopo... se rimangono


 Boh.. direi string.h per trattare le stringhe.
quello c'è
.
... c'è quaocuno che mi dice come usare le funzioni
presenti in time.h ?
Ciao
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
char *__tm_zone;
int __tm_gmtoff;
};
char * asctime(const struct tm *_tptr);
clock_t clock(void);
char * ctime(const time_t *_cal);
double difftime(time_t _t1, time_t _t0);
struct tm * gmtime(const time_t *_tod);
struct tm * localtime(const time_t *_tod);
time_t mktime(struct tm *_tptr);
size_t strftime(char *_s, size_t _n, const char *_format, const struct tm
*_tptr);
time_t time(time_t *_tod);

 
Google o un manuale (anche online). Comunque il tuo problema e' con i 
tipi, quindi basta leggere attentamente la dichiarazione delle funzioni.
Hai fatto le correzioni? Ora ti posto la correzione definitiva e 
funzionante :-)
------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
   char *str_adesso=malloc(100);
   time_t adesso=time(NULL);
   strcpy(str_adesso,ctime(&adesso));
   printf(str_adesso);
   return 0;
}
------------------------
Ti assicuro che funziona, ho compilato con $gcc -o ora ora.c -Wall e non 
mi ha segnalato niente. Ovviamente l'allocazione della stringa si puo' 
ottimizzare...


[...]
... ti ringrazio per il codice.
l'ho compilato  con gcc -c data.c
e tutto OK
poi con :
gcc - data.exe -o data.o
c'è un errore del compilatore(update a gcc4.01)con:
C:\Djgpp\MieiFile2>gcc -c data.c
C:\Djgpp\MIEIFI~1>gcc data.exe -o data.o
gcc.exe: az.exe: No such file or directory (ENOENT)
gcc.exe: no input files
non sò cosa dire, sarà uno sbaglio mio?
Ciao

 gcc - data.exe -o data.o
Non dovrebbe essere 'gcc data.o -o data.exe'? E poi non fai prima con 
gcc data.c? Su linux produce un eseguibile gia' pronto, suppongo anche 
su win.


 su win.
... ho provato anche con il mingw
compilando da un file.bat con il path
completo ma salta fuori lo stesso errore.
provo con gcc -o data.exe data.c
ora nn ricordo + ma mi sembra corretta l'istruzione.
Ciao