【发布时间】:2020-10-28 19:28:59
【问题描述】:
我有这些功能
char *hash(char *stringa, char *tipohash) {
if (strcmp(tipohash, "md5") == 0) {
stringa = md5(stringa);
}
return stringa;
}
char *md5(char *stringa) {
unsigned char risultato[MD5_DIGEST_LENGTH];
int i;
char *hashfinale = malloc(sizeof(char) * MD5_DIGEST_LENGTH * 2);
MD5((const unsigned char *)stringa, strlen(stringa), risultato);
for (i = 0; i < MD5_DIGEST_LENGTH; i++) {
sprintf(hashfinale + 2 * i, "%02x", risultato[i]);
}
return (char *)hashfinale;
}
如何在不丢失字符串值的情况下返回(char *)hashfinale?
这是来电者
char *hashlinea = hash(stringa, hashType);
【问题讨论】:
-
将该函数记录为返回一个需要传递给
free的指针,并让被调用者处理它。 -
或者您可以修改签名以获取指向数组第一个字符的指针(加上数组的长度)并使用它,而无需您的函数进行任何动态分配。
-
@Someprogrammerdude 我不明白你在说什么
-
问题是,如果你释放函数中的指针,它就不再可用,所以返回它会调用未定义的行为,你应该像你一样返回指针,并在你调用的任何地方释放它使用返回的指针后的函数。
-
我不明白你的问题是什么。是否要返回指向字符串的指针?如果是,则需要返回一个未释放的指针。如果不是,为什么要返回指针/值?
标签: c memory memory-management malloc free