我需要帮助来检查我的代码是否正确。代码太大而无法完全包含,因此我只会粘贴受影响的部分。
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
,一个?
编辑更多信息:
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;
}
由于
答案 0 :(得分:5)
这当然取决于内存来自何处,Decode_URL()
正在返回指针。
如果它是静态数组,那么你的用法就可以了。
如果它是动态分配的(由malloc()
或其任何朋友),那么你就是在泄漏内存。
答案 1 :(得分:2)
这是对的。你也可以选择
sprintf(DataB[4],"%s",Decode_URL(tmp_backup5))
答案 2 :(得分:0)
只要你不需要对数据做更多的事情,当然可以,为什么不呢?
答案 3 :(得分:0)
我们真正需要知道的是Decode_URL用于创建返回的char指针所指向的内存,是malloc在这种情况下你需要释放它,它是静态的,在这种情况下你需要小心如何你使用函数和返回的数据,因为函数将不是可重入的,也不是线程安全的。
答案 4 :(得分:0)
这是正确的,因为使用tmp没有其他用法,尽管您可能需要考虑
这个宏:
#define SET_TEMP(BACKUP, TMP, DATA) \
TMP=Decode_URL(BACKUP); \
sprintf(DATA,"%s",TMP)
并像这样使用它:
SET_TEMP(tmp_backup1, tmp, DataB[0]);
...
无论如何,你很高兴,宏只是一种更好的编码风格。
看到添加的代码后,确实存在内存问题。
这就是你的宏应该是这样的:
#define SET_TEMP(BACKUP, TMP, DATA) \
TMP=Decode_URL(BACKUP); \
sprintf(DATA,"%s",TMP); \
free(TMP)
并像这样使用它:
SET_TEMP(tmp_backup1, tmp, DataB[0]);
...