[ vidonk @ 04.11.2017. 16:52 ] @
Pozdrav forumaši,

u zadnje vrijeme sam pročitao par "jeftinih" pdf-ova iz low level C programiranja, odradio primjere, dodatne testove i td. ali sam naišao na problem prilikom nastavka učenja, jer ne mogu da odredim koji su mi sve argumenti potrebni u nekoj na pr. sistemskoj funkciji, ne znam kako se developeri odnose kada čitaju dokumentaciju o nekoj funkiciji, kako znaju šta im sve treba. Evo primjera

Hoću da napravim program koji će mi prikazati trenutno vrijeme/datum, kucam man time nije, probam man time2, t_time itd nema, ajde google mi kaže ctime valjda od current time e sad man mi daje prilično detaljan opis ali nema nigdje ono što mi treba neki primjer nešto korisno. Ajde opet google i nađem

Code:
char *ctime(const time_t *timer)


I sad mi nije jasno šta je pointer prije zagrade (char *ctime) a šta je pointer u zagradi (const time_t *time)? Ajde opet google i nađem primjer


Code:

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);

   printf("Current time = %s", ctime(&curtime));

   return(0);
}


E sad idem redom. Include <time.h> dobro, idemo sledeći kod "time_t curtime" mislim da je deklaracija da curtime bude time_t, ali ne znam šta je time_t ? Posle deklarišemo da je time memorijska lokacija od curtime ? I na kraju mi nije jasno zašto jedostavno ne ide prinf time nego ide ctime(&curtime) ?

Hvala na bilo kakvom pojašnjenju
[ djoka_l @ 04.11.2017. 17:00 ] @
time_t je struktura čija se definicija nalazi u time.h
Strukturu ne možeš da ispišeš sa printf. ctime pretvara vrednost polja u strukturi time_t u alfanumerički niz koji je "čitljiv".

A ona pitanja sa pointerima je pokazatelj da baš ne znaš mnogo o C.
char *ctime(const time_t *timer)
znači da je ctime funkcija koja kao rezultat vraća pokazivač na niz znakova (char *) a da je argument funkcije pokazivač na strukturu time_t
[ mjanjic @ 04.11.2017. 19:18 ] @
Samo mala ispravka, nije pokazivač u argumentu na strukturu "time_t", već na strukturu "timer" koja je tipa "time_t" (analogno kao što bi za ugrađen tip podataka, npr. int, bilo (const int *a).
[ Branimir Maksimovic @ 04.11.2017. 19:31 ] @
Kakva struktura timer? Pa time_t je typedef za obicni integer.... mada mislm da je typo, mislio si verovatno na curtime.

Inace vreme iz ctime se prikazuje f-jom strftime
Evo imam bas zgodan primer:

Code:

#include <time.h>
#include <stdio.h>

int main(void) {
    char buf[128];
    struct tm t;
    time_t tt;
    time(&tt);
    localtime_r(&tt,&t);
    strftime(buf,sizeof buf,"\%Y\%m\%d",&t);
    puts(buf);
}



edit: ah tek sad videh da ctime vraca string ;p
No toliko o tome kolko je cesto koristim ;p

[Ovu poruku je menjao Branimir Maksimovic dana 04.11.2017. u 20:46 GMT+1]
[ djoka_l @ 04.11.2017. 19:49 ] @
time_t može da bude int, može da bude long, može da bude i bilo šta drugo, zavisno od implementacije.
[ vidonk @ 04.11.2017. 20:31 ] @
Citat:
djoka_l:
time_t je struktura čija se definicija nalazi u time.h
Strukturu ne možeš da ispišeš sa printf. ctime pretvara vrednost polja u strukturi time_t u alfanumerički niz koji je "čitljiv".

Zaista lijepo objašnjeno hvala
Citat:
djoka_l:
A ona pitanja sa pointerima je pokazatelj da baš ne znaš mnogo o C.

Znaš kako čitao sam eng verziju pa nisam uspio tačno i bukvalno da prevedem tehnikalije kao na pr da je char *ctime ustvari ime funkcije, pointer i da je tip char

Citat:
djoka_l:
char *ctime(const time_t *timer)
znači da je ctime funkcija koja kao rezultat vraća pokazivač na niz znakova (char *) a da je argument funkcije pokazivač na strukturu time_t


da sad mi je jasnije zaista ti hvala na vrhunskom objašnjenju, znam da tebi ovo izgleda trivijalno i da developeri mrze da pojašnjavaju ali nisam uspio naći valjano objašnjeno.
[ Branimir Maksimovic @ 04.11.2017. 21:27 ] @
Citat:
djoka_l:
time_t može da bude int, može da bude long, može da bude i bilo šta drugo, zavisno od implementacije.


Teoretski moze, ali prakticno posto f-ja time vraca broj sekundi od 1.1.1970 ilitu unix timestamp poznatije, tesko da moze biti bilo sta osim integera. Medjutim,
POSIX zahteva da bude integer.