从C函数返回char指针

use*_*850 0 c pointers char

我需要帮助来检查我的代码是否正确.代码太大而无法完全包含,因此我只会粘贴受影响的部分.

char *tmp;
tmp=Decode_URL(tmp_data);
sprintf(Data,"%s",tmp);
tmp=Decode_URL(tmp_backup1);
sprintf(DataB[0],"%s",tmp);
tmp=Decode_URL(tmp_backup2);
sprintf(DataB[1],"%s",tmp);
tmp=Decode_URL(tmp_backup3);
sprintf(DataB[2],"%s",tmp);
tmp=Decode_URL(tmp_backup4);
sprintf(DataB[3],"%s",tmp);
tmp=Decode_URL(tmp_backup5);
sprintf(DataB[4],"%s",tmp);
Run Code Online (Sandbox Code Playgroud)

Decode_URL函数返回一个char *.

所以我的问题是,总是tmp用来接收char *函数返回的是否正确?或者我应该创建更多char *tmpx,每次呼叫一个Decode_URL


编辑更多信息:

char *Decode_URL(char *url){
      char *check;
      check=EnDeCrypt(some vars here);
      return check;
}

char *EnDeCrypt(const char *pszText, int iTextLen, const char *pszKey)
{
    char *cipher;
    int a, b, i=0, j=0, k;
    int ilen;
    int sbox[256];
    int key[256];

    ilen = strlen(pszKey);

    for (a=0; a < 256; a++)
    {
        key[a] = pszKey[a % ilen];
        sbox[a] = a;
    }

    for (a=0, b=0; a < 256; a++)
    {
        b = (b + sbox[a] + key[a]) % 256;
        swapints(sbox, a, b);
    }

    cipher = (char *)malloc(iTextLen);

    for (a=0; a < iTextLen; a++)
    {
        i = (i + 1) % 256;
        j = (j + sbox[i]) % 256;
        swapints(sbox, i, j);
        k = sbox[(sbox[i] + sbox[j]) % 256];
        cipher[a] = pszText[a] ^ k;
    }
    return cipher;
}
Run Code Online (Sandbox Code Playgroud)

谢谢

unw*_*ind 5

这当然取决于内存来自何处,即Decode_URL()返回指针.

如果它是一个静态数组,你的用法很好.

如果它是动态分配的(malloc()由其朋友或任何朋友),那么你就是在泄漏内存.

  • +1提及内存泄漏.还添加关于返回本地数组地址将完成答案. (2认同)