sprintf工作正常,sprintf_s给出访问冲突错误

时间:2013-02-21 22:12:02

标签: printf

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

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

1 个答案:

答案 0 :(得分:2)

由于您将偏移量传递到缓冲区,因此还需要减小传递给snprintf_s的大小。那就是:

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