Мне нужна помощь, чтобы проверить, действительно ли мой код. Код слишком велик, чтобы включить его полностью, поэтому я буду вставлять только затронутые части.Возвращающий указатель на указатель от функции C
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);
Decode_URL
функция возвращает char *
.
Так что мой вопрос: правильно ли всегда использовать tmp
для получения char *
, возвращаемого функцией? Или я должен создать больше char *tmpx
, по одному для каждого звонка до Decode_URL
?
EDIT для получения дополнительной информации:
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;
}
Благодаря
его нормально с одним TMP !!! пока предыдущий не будет использован повторно. – akp
зависит от того, как этот * char создан, стек мудрый, куча или возвращающий const. –
, вероятно, до тех пор, пока возвращаемое значение не будет адресом локальной переменной 'Decode_url()' –