我在 iOS 应用程序中使用 md5.c 文件。 http://opensource.apple.com/source/cvs/cvs-33/cvs/lib/md5.c?txt
当我编译时,我得到错误:' builtin _memset_chk'调用中'sizeof'的参数与目标的表达式相同;你的意思是取消引用它吗?
这在以下行中: memset(ctx, 0, sizeof(ctx)); /* 如果它是敏感的 */
需要改变什么?
琳达
我在 iOS 应用程序中使用 md5.c 文件。 http://opensource.apple.com/source/cvs/cvs-33/cvs/lib/md5.c?txt
当我编译时,我得到错误:' builtin _memset_chk'调用中'sizeof'的参数与目标的表达式相同;你的意思是取消引用它吗?
这在以下行中: memset(ctx, 0, sizeof(ctx)); /* 如果它是敏感的 */
需要改变什么?
琳达
我认为编译器会询问您是否要将那行代码更改为:
memset(ctx, 0, sizeof(*ctx));
您可以通过以下方式摆脱警告:
size_t len = sizeof(ctx);
memset(ctx, 0, len);
但这只会将结构的前 4 个字节归零。正如@dans3itz 所说,它可能是代码错误,而 sizeof(*ctx) 可能就是这个意思。由于正如评论所说,这是为了“保护”,因此该功能的运行并不是真正必要的。有趣的是,这段代码已经发布了这么多年,没有人发现它。