忍者ブログ
Admin§CommentRes

KK@3Sの……なブログ(仮)

プログラミングだけでは、続かないと悟り、 一般日記ブログに変更! まだ方向性など決まってないので、 名前も(仮)がついてます(笑) もしかすると管理者名さえ変わるかも??

HOME ≫ Entry no.7 「【猫プロ】Windows SDK 第1部 (3) 第10章」 ≫ [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


【猫プロ】Windows SDK 第1部 (3) 第10章

【感想】
    第10章をクリアするのに、予想以上に時間がかかってしまった。

    負け惜しみに聞こえるかもしれないが
    すぐに組み終わってはいた。
    普通に時間は表示されていたし、実行ファイルに何も問題はなかった。

    しかし、変な警告が消えなくて悪戦苦闘していた…。
    タイプミスだと思い込み、見直していたりしていたら、
    時間が過ぎてしまった。

    動くんだし、警告なんてほっとけば?と
    おっしゃる方もいらっしゃるかもしれない。

    でも、一応、プログラマのはしくれですから、
    警告をそのままほってなんて進めないッス。
    # 時と場合によりますが。

    進捗が遅いが、じっくり納得いくまで考えて、
    最後までやり遂げよう。

【本日の進捗】
    猫でもわかるプログラミング
    Windows SDK編 第1部
    第5章まで完了    10 / 350

▽【発生した問題点とその解決策】

【発生した問題点とその解決策】

  ・関数sprintf,localtimeで警告
      (章)
        第10章
      (詳細)
        関数sprintfと関数localtimeに対して、コンパイラが下記の警告を出力していた。

        > 関数sprintfに対する警告
            warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
            c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 'sprintf' の宣言を確認してください。

        > 関数localtimeに対する警告
            warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
            c:\program files\microsoft visual studio 9.0\vc\include\time.inl(114) : 'localtime' の宣言を確認してください。
        
      (解決策)
        Visual C++のVersion Upにより、関数sprintf,localtimeのセキュリティを強化した関数が用意されたため、
        既存関数の使用を推奨しないという警告を出力するようになった模様。()
        それぞれのセキュリティ強化版の関数は下記。
        
            ・spritf    ⇒ sprintf_s   (参考サイト(2)(3))
            ・localtime ⇒ localtime_s (参考サイト(4)(5))
        
        ただし、localtimeは引数、戻り値が変更となっているため、
        関数名以外にも変更が必要。(詳細は参考サイト参照)

        上記を踏まえ、修正したコードを下記に記載する。

         >修正前
        int GetTimeStr(void)
        {
            char *str_org = "ただいま%2d年%d月%2d日の%2d時%2d分%2d秒です";
        
            time_t long_time;
            struct tm *now_time;
        
            time(&long_time);
            now_time = localtime(&long_time);
                
            sprintf(time_str,
                      str_org,
                      now_time->tm_year,
                      now_time->tm_mon + 1,
                      now_time->tm_mday,
                      now_time->tm_hour,
                      now_time->tm_min,
                      now_time->tm_sec
                      );
        
            return 0;
            
        }
        
         >修正後
        int GetTimeStr(void)
        {
            char *str_org = "ただいま%2d年%d月%2d日の%2d時%2d分%2d秒です";
                
            time_t long_time;
            struct tm now_time;                 // ポインタから、変数実体に変更
        
            time(&long_time);
            localtime_s(&now_time,&long_time);  // 戻り値から引数に変更
        
            sprintf_s(time_str,                 // ポインタでないため、"->"から"."に変更
                      str_org,
                      now_time.tm_year,
                      now_time.tm_mon + 1,
                      now_time.tm_mday,
                      now_time.tm_hour,
                      now_time.tm_min,
                      now_time.tm_sec
                      );
        
            return 0;
            
        }

        (参考サイト)
            MSDNライブラリ
                (1)CRT のセキュリティ強化
                (2)sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_l
                (3)sprintf_s、_sprintf_s_l、swprintf_s、_swprintf_s_l
                (4)localtime、_localtime32、_localtime64
                (5)localtime_s、_localtime32_s、_localtime64_s

・タイマの再セットしないのか?
      (章)
        第10章

      (詳細)
        私の勝手な思い込みかもしれないが、タイマがタイムアップした際には、
        再度タイマのセット処理をしてやらないと、タイムアップしっぱなしになったり、
        次のタイムアップが検出できなくなると考えていた。
        そのため、猫プロ記載のコードに再セット処理がないことに懸念を抱いた。

      (解決策)
        killTimerを呼ぶまで、指定した時間ごとに
        タイムアウトメッセージが発行されるようである。
        つまり、再セットは不要。

        しかし、実際に使用する際はKillTimerを忘れると、
        意図しないメッセージが発行される恐れがあるため注意が必要。
PR

●Thanks Comments

●この記事にコメントする

お名前
タイトル
文字色
E-mail
URL
コメント
絵文字 Vodafone絵文字 i-mode絵文字 Ezweb絵文字
パスワード ※投稿者編集用
秘密? ※チェックすると管理人にしか見えません

●この記事へのトラックバック

TrackbackURL:

いくつになったかな?

ご覧になられた人数

カレンダー ▽

広告

中古パソコンショップP-pal






プロフィール

HN:
KK@3S
性別:
男性

ブログライター

アフィリエイトならリンクシェア

サンプル・イベント・モニターならBloMotion

アフィリエイト ブログ

≪ 【猫プロ】Windows SDK 第1部 (4) 第11章 |PageTop| 【猫プロ】Windows SDK 第1部 (2) 第6章 ~ 第9章 ≫

※ 忍者ブログ ※ [PR]
 ※
Writer 【KK@3S】  Design by NUI.T  Powered by NinjaBlog