13,825
社区成员
发帖
与我相关
我的任务
分享
// 原函数
HString HMD5::MD5(HString MD5Str)
{
int vLen = MD5Str.Length() ;
char *tmp1, *tmp2 ;
tmp1 = new char[vLen];
tmp2 = new char[100];
strcpy(tmp1,MD5Str.c_str());
//tmp2 = GetMD5OfStr(tmp1, vLen, tmp2); 二种方法一样
GetMD5OfStr(tmp1, vLen, tmp2);
HString MD5STR = (HString)(tmp2);
delete[] tmp1, tmp2 ;
return MD5STR ;
}
// 我自己修改后的函数
HString __fastcall MD5::MD5(HString MD5Str)
{
int vLen = MD5Str.Length() ;
char *tmp1, *tmp2 ;
tmp1 = new char[vLen];
tmp2 = new char[100];
// 原始代码有指针错误,原因不明,用下面替换后正常。
// 估计是strcpy在目的字符串结尾加'\0'字符引起的错误
// 由于tmp1大小等于MD5Str字符大小没有包括'\0'字符
// 所以用strcpy字符串复制函数不正确。
//strcpy(tmp1,MD5Str.c_str());
// 替换strcpy
const char *p = MD5Str.c_str();
for (int i=0; *(p+i) != NULL; i++)
{
*(tmp1+i) = *(p+i);
}
// 替换strcpy
//tmp2 = GetMD5OfStr(tmp1, vLen, tmp2); 二种方法一样(原注释)
GetMD5OfStr(tmp1, vLen, tmp2);
HString MD5STR = (HString)(tmp2);
delete []tmp1;
delete []tmp2;
return MD5STR ;
}
// 2008-07-24 创建