まだまだ続く、C言語の勉強。
前の記事で少し書いていた「作ろうと思っているツール」に必要な機能をつけるために、コードの記述を学習している。
日記というよりも、よくわからない殴り書きみたいになってるけどw
最初に年月日の取得について調べたときに「LocalTime関数を使う方法がある」という話があって。
サンプル付きで書かれてたので記述して実行してみたものの、エラーが発生。
これについて調べてみたら、元からこの関数自体が安全なものではなかった(?)らしく。
うろ覚えだけど、2012年(Visual Studio 2012)あたりまでは警告扱いだったので動作自体はしてたんだけど、2013(Visual Studio 2013)ぐらいからエラーとして扱われるようになったとか。
うろ覚えだけど、2012年(Visual Studio 2012)あたりまでは警告扱いだったので動作自体はしてたんだけど、2013(Visual Studio 2013)ぐらいからエラーとして扱われるようになったとか。
一応、エラーを回避するコードを使えば動作するようにはなるらしいけど、安全性に乏しい気がして。
別の方法を探してたら上記のサイト様を発見し、LocalTime_s関数というのがあることを知った。
別の方法を探してたら上記のサイト様を発見し、LocalTime_s関数というのがあることを知った。
注意するべき点は、関数の使用にtime.hのインクルードが必要なこと。
構造体によって取得された値をそのまま使うと数値にズレ(?)が生じるということ。
tm_yearの値は、1900年から現在までの経過年数が取得されているため、今の年を正確に表示するためには1900をプラスする必要がある。
tm_monの値は、月の初めを0として数えるため、正確に表示するためには1をプラスする必要がある。
構造体によって取得された値をそのまま使うと数値にズレ(?)が生じるということ。
tm_yearの値は、1900年から現在までの経過年数が取得されているため、今の年を正確に表示するためには1900をプラスする必要がある。
tm_monの値は、月の初めを0として数えるため、正確に表示するためには1をプラスする必要がある。
余談だけど、変数cの宣言とgetchar関数は、起動したあと勝手に終了してしまうのでそれを防ぐために記述したコード。
(どのバージョンだったかは忘れたけど、以前まではCtrlキーを押しながらF5キーを押せば終了前で止まってくれてた。けどVisual Studio 2017はそれがなくなってるっぽい)
(どのバージョンだったかは忘れたけど、以前まではCtrlキーを押しながらF5キーを押せば終了前で止まってくれてた。けどVisual Studio 2017はそれがなくなってるっぽい)
で、このコードを実行すると。
とりあえずは、自分の思ったとおりに出力できた。
……みたいなことで、学習すべきコードはまだまだあるので、勢い(?)は緩められない。

