0

我一直在使用此页面中的 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]);

它编译得很好,但后来我得到了错误。知道为什么吗?

4

1 回答 1

2

Since you pass an offset into your buffer, you also need to reduce the size you pass to snprintf_s. That is:

snprintf_s(buf+i*2, 33-2*i, "%02x", digest[i]);
于 2013-02-21T22:18:02.233 回答