Cで時刻を扱うとき
忙しい人のためのまとめ
localtime
とかgmtime
使うとハマる
おとなしくlocaltime_r
かgmtime_r
使っとけ
ハマった内容
localtime
とgmtime
を同時にこんな感じに使う
time_t timer; struct tm *local, *global; time(&timer); local = localtime(&timer); global = gmtime(&timer);
実はこれメモリ空間を共有してて
local
とglobal
を表示すると同じ値になってる
解決策
まとめでも言ったけど
localtime_r
とglobal_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引数で構造体指定する。
終わりに
なんでこんな仕様なんだろ
メモリ共有してるやつの使いドコロがわからない
いやいやさすがにそんな糞仕様してないでしょ…
— ゆず@社会人1年生 (@yuzu_441) 2016年4月21日
と思って自分のコード疑った結果糞仕様が判明して萎えてる
ちゃんとドキュメント読もうな^^