忍者ブログ
Admin§CommentRes

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

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

HOME ≫ Entry no.11 「【警告対処メモ】関数sprintf,localtimeに関する警告」 ≫ [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6]

[PR]

×

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


【警告対処メモ】関数sprintf,localtimeに関する警告

警告対処したときのメモです。
同じ警告が出ている方は参考にどうぞ。

警告コード:
C4996

警告全文:
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' の宣言を確認してください。

解決策:
Visual C++のVersion Upにより、関数sprintf,localtimeのセキュリティを
強化した関数が用意されたため、既存関数の使用を推奨しないという警告を
出力するようになった模様。( 参考サイト(1))

それぞれのセキュリティ強化版の関数は下記。

・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

PR

●Thanks Comments

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

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

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

TrackbackURL:

いくつになったかな?

ご覧になられた人数

カレンダー ▽

広告

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






プロフィール

HN:
KK@3S
性別:
男性

ブログライター

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

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

アフィリエイト ブログ

≪ 【警告対処メモ】'char[XX]' から 'LPCWSTR'へのキャスト |PageTop| 【VBスクリプト】Excel2007(XXXX.xlsx)→Excel2003(XXXX.xls)変換スクリプト ≫

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