我一直在使用此页面中的md5实现:
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]);
编译好但后来我得到了错误。知道为什么吗?
答案 0 :(得分:2)
由于您将偏移量传递到缓冲区,因此还需要减小传递给snprintf_s
的大小。那就是:
snprintf_s(buf+i*2, 33-2*i, "%02x", digest[i]);