ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

Cで時刻を扱うとき

C言語の本でC言語学んでたら時刻の扱いでハマった

忙しい人のためのまとめ

localtimeとかgmtime使うとハマる

おとなしくlocaltime_rgmtime_r使っとけ

ハマった内容

localtimegmtimeを同時にこんな感じに使う

time_t timer;
struct tm *local, *global;

time(&timer);
local = localtime(&timer);
global = gmtime(&timer);

実はこれメモリ空間を共有してて
localglobalを表示すると同じ値になってる

解決策

まとめでも言ったけど
localtime_rglobal_rを使いましょう

_rがついているものは、関数の引数に構造体を作る領域を指定する

struct tm *localtime_r (const time_t *timer, struct tm *result);
struct tm *gmtime_r (const time_t *timer, struct tm *result);

第2引数で構造体指定する。

終わりに

なんでこんな仕様なんだろ
メモリ共有してるやつの使いドコロがわからない

ちゃんとドキュメント読もうな^^