2013-02-21 40 views
0

我一直在使用本頁面發現MD5實現:sprintf的正常工作,sprintf_s給訪問衝突錯誤

http://www.zedwood.com/article/121/cpp-md5-function

由於這是它工作正常。然而,有這樣的功能:

// return hex representation of digest as string 
std::string MD5::hexdigest() const 
{ 
    if (!finalized) 
    return ""; 

    char buf[33]; 
    for (int i=0; i<16; i++) 
    sprintf(buf+i*2, "%02x", digest[i]); 
    buf[32]=0; 

    return std::string(buf); 
} 

如果我改變的sprintf到安全的版本(sprintf_s),然後我得到一個訪問衝突運行時錯誤。我唯一改變的是sprintf行,像這樣:

sprintf_s(buf+i*2, 33, "%02x", digest[i]); 

它編譯得很好,但後來我得到了錯誤。任何想法爲什麼?

回答

2

由於您向緩衝區傳遞了偏移量,因此還需要減小傳遞到snprintf_s的大小。那就是:

snprintf_s(buf+i*2, 33-2*i, "%02x", digest[i]); 
+0

當然......非常感謝! – Michael 2013-02-21 23:31:33