字符* 的值在' __android_log_write'后更改

value of char* changed after ' __android_log_write'

本文关键字:write log android 字符      更新时间:2023-10-16

我想多次调用MD5函数并返回带有打击代码的结果。

char *finalenc= (char*)malloc(32);
finalenc = "";
for (int i = 0; i < md5repeatTime; ++i) {
if (i == 0)
finalenc = md5(env, chtime, 0);
else {
finalenc = md5(env, finalenc, 0);
}
}
__android_log_write(ANDROID_LOG_ERROR, "releasetimefortest", finalenc);

我有两个问题:

  1. 当我记录结果时,"finalenc"值丢失并更改为未知值。
  2. 当我多次调用这部分代码时,我收到此错误:

    libc:致命信号 6 (SIGABRT( 在 0x000006df

改 性:

char *md5(JNIEnv *env, char *cstr, int mode) {
MD5_CTX context = {0};
MD5Init(&context);
MD5Update(&context, (unsigned char *) cstr, strlen(cstr));
unsigned char dest[16] = {0};
MD5Final(dest, &context);
char mdString[33];
int i;
for (i = 0; i < 16; i++) {
sprintf(&mdString[i*2], "%02x", (unsigned int)dest[i]);
}
return mdString;
}

最后我找到了解决方案:MD5功能:

char *md5(JNIEnv *env, char *cstr,char mdString[65]) {
MD5_CTX context = {0};
MD5Init(&context);
MD5Update(&context, (unsigned char *) cstr, strlen(cstr));
unsigned char dest[16] = {0};
MD5Final(dest, &context);
//    (*env)->ReleaseStringUTFChars(env, data, cstr);
//    char mdString[33];
int i;
for (i = 0; i < 16; i++) {
sprintf(&mdString[i*2], "%02x", (unsigned int)dest[i]);
}
return mdString;
}

并调用该函数

char mdString[65]={0};
if (md5enable == 1) {
for (int i = 0; i < md5repeatTime; ++i) {
if (i == 0) {
md5(env, chtime, mdString);
}
else {
md5(env, mdString,mdString);
}
}

}