c++ - char* 的值在 ' __android_log_write' 之后更改

标签 c++ c java-native-interface

我想多次调用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: 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/

相关文章:

java - Android java.lang.UnsatisfiedLinkError 与 native 库

c++ - 在 C++ 中用空格分割字符串

c++ - 如何在 Windows 10 中获取 QDialog 的 HWND

c - 编写将 int 返回给 Fortran 的 C 函数

c - 存储子目录的引用

java - 如何使用 JNI 创建 native 类?

c++ - 我怎样才能摆脱这段代码中的重复?

c++ - C++模板特化的思考

c - 如何在 C 中反转多维数组?

java - Jni FindClass 返回 NULL