2013-06-27 80 views
0

我有一個關於靜態源代碼分析的項目。 錯誤消息:「錯誤C4996:'ctime':此函數或變量可能不安全」。 這裏是我在ctime中得到錯誤的代碼部分。 如果有人能幫我克服這個錯誤,我會很高興。錯誤C4996:'ctime'

virtual bool onTLSConnect(const CertInfo& info) 
    { 
     printf("status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n" 
       "from: %s\nto: %s\n", 
       info.status, info.issuer.c_str(), info.server.c_str(), 
       info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(), 
       info.compression.c_str(), ctime((const time_t*)&info.date_from), 
       ctime((const time_t*)&info.date_to)); 
     return true; 
    } 
+0

等等,微軟是否將C4996的類型從警告改爲錯誤? – Medinoc

回答

0

編譯器消息來自使用ctime可言,但你的使用會給出不正確的結果:調用CTIME將返回相同的地址,內部的,靜態的,線程本地緩存,這意味着你要printf通話將錯誤地顯示相同的日期。

至少,你應該這樣做:

virtual bool onTLSConnect(const CertInfo& info) 
{ 
    std::string dateFrom(ctime(reinterpret_cast< const time_t* >(&info.date_from)); 
    std::string dateTo (ctime(reinterpret_cast< const time_t* >(&info.date_to)); 

    printf("status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n" 
      "from: %s\nto: %s\n", 
      info.status, info.issuer.c_str(), info.server.c_str(), 
      info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(), 
      info.compression.c_str(), dateFrom.c_str(), 
      dateTo.c_str()); 
    return true; 
} 

編譯器的問題,您可以禁用這個完全與#define,或者你可以禁用它只是當你需要它:

virtual bool onTLSConnect(const CertInfo& info) 
{ 
    #pragma warning(push) 
    #pragma warning(disable:4996) 
    std::string dateFrom(ctime(reinterpret_cast< const time_t* >(&info.date_from)); 
    std::string dateTo (ctime(reinterpret_cast< const time_t* >(&info.date_to)); 
    #pragma warning(pop) 

    printf("status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n" 
      "from: %s\nto: %s\n", 
      info.status, info.issuer.c_str(), info.server.c_str(), 
      info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(), 
      info.compression.c_str(), dateFrom.c_str(), 
      dateTo.c_str()); 
    return true; 
} 
+0

錯誤:錯誤C2065:'date_to':未聲明的標識符 錯誤C2228:'左邊'。 c_str'必須有class/struct/union – lilya

+0

解決了謝謝 – lilya