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

バッファにオフセットを渡すため、渡すサイズも小さくする必要がありますsnprintf_s。あれは:

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