我想多次调用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);
我有两个问题:
- 当我记录结果时,“finalenc”值会丢失并更改为未知值。
- 当我多次调用这部分代码时,我收到此错误:
libc: Fatal signal 6 (SIGABRT) at 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);
}
}
}
关于c++ - char* 的值在 ' __android_log_write' 之后更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45258908/