strlen()出错

wmjhl 2014-10-31 11:43:48
调试可以通过,但每次运行到 int len = strlen(str) 就会出错
错误信息: 0x1027d540 (msvcr100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x01145000 时发生访问冲突
const char * Ccommon::md5(const char * str)
{
MD5_CTX ctx;
const unsigned char * buf = reinterpret_cast<const unsigned char *>(str);
int len = strlen(str);
HINSTANCE hDLL;
if ( (hDLL = LoadLibrary(_T("advapi32.dll"))) > 0 )
{

MD5Init = (PMD5Init)GetProcAddress(hDLL,"MD5Init");
MD5Update = (PMD5Update)GetProcAddress(hDLL,"MD5Update");
MD5Final = (PMD5Final)GetProcAddress(hDLL,"MD5Final");

MD5Init(&ctx);
MD5Update(&ctx, buf, len);
MD5Final(&ctx);
}
return Hex2ASC(ctx.digest, 16);
}
...全文
423 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmjhl 2014-10-31
  • 打赏
  • 举报
回复
字符串长度超过50个
笨笨仔 2014-10-31
  • 打赏
  • 举报
回复
MD5加密的长度有限,不会溢出的。 将定义与赋值分开试试

int len;
len=strlen(str);
shen_wei 2014-10-31
  • 打赏
  • 举报
回复
到底多少是过长???
xiao_dong_dong 2014-10-31
  • 打赏
  • 举报
回复
用CString temp=str; temp.GetLength()行不行啊
wmjhl 2014-10-31
  • 打赏
  • 举报
回复
引用 4 楼 shen_wei 的回复:
[quote=引用 3 楼 wqvbjhc 的回复:]

if(!str){
 return NULL;
}
int len = strlen(str);//添加上面判断
先判断Str的值。。[/quote] 还是不行,只要字符串过长就会出现这种情况
shen_wei 2014-10-31
  • 打赏
  • 举报
回复
引用 3 楼 wqvbjhc 的回复:

if(!str){
 return NULL;
}
int len = strlen(str);//添加上面判断
先判断Str的值。。
wqvbjhc 2014-10-31
  • 打赏
  • 举报
回复

if(!str){
 return NULL;
}
int len = strlen(str);//添加上面判断
jacksonfan 2014-10-31
  • 打赏
  • 举报
回复
str是指针,整型数据 应该是int len = strlen(*str);
Henzox 2014-10-31
  • 打赏
  • 举报
回复
检查 str 是不是一个以 \0 结尾的字符串。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧