【问题标题】:sprintf works fine, sprintf_s gives Access Violation Errorsprintf 工作正常,sprintf_s 给出访问冲突错误
【发布时间】:2013-02-21 22:12:02
【问题描述】:

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

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

【问题讨论】:

    标签: printf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-13
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      相关资源
      最近更新 更多