У меня есть функция, которая берет URL-адрес и возвращает запрашиваемый тип файла, но я не могу понять, как я могу освободить и вернуть символ malloc'd.c return variable и free malloc'd memory
const char* lookup(const char* path){
char* rawEnding;
char* ending = malloc(strlen(path));
char* mime = malloc(strlen(path));
rawEnding = strrchr(path, '.');
if(strcasecmp(rawEnding, ".css") == 0 || strcasecmp(rawEnding, ".html") == 0 || strcasecmp(rawEnding, ".javascript") == 0 || strcasecmp(rawEnding, ".php") == 0) {
memmove(ending, rawEnding+1, strlen(rawEnding));
sprintf(mime, "text/%s", ending);
free(ending);
return mime;
} else if (strcasecmp(rawEnding, ".gif") == 0 || strcasecmp(rawEnding, ".ico") == 0 || strcasecmp(rawEnding, ".png") == 0) {
memmove(ending, ending+1, strlen(ending));
sprintf(mime, "image/%s", ending);
return mime;
} else if (strcasecmp(rawEnding, ".jpg") == 0 || strcasecmp(rawEnding, ".jpeg") == 0) {
return "text/jpeg";
} else {
return NULL;
}
}
Если вы хотите вернуть 'mime', вы должны освободить его из-за функции. – Rabbid76
Вы не можете освобождать и возвращать что-то, потому что освобождение его уничтожает. Вы должны освободить его извне, и из-за этого вы должны вернуть только память 'malloc''d или' NULL'. – zneak
Ваш код не будет работать, если 'strrchr' возвращает' NULL'. Вы также не выделяете достаточную память для возвращаемой строки. Например, если «путь» равен «x.gif», «mime» будет указывать на 5-символьный буфер, но ваш код попытается поместить 10 символов, включая завершающий «NUL», в эти 5 символов. –