Интересное/странное использование malloc — какой смысл?

Изучая недавно код libfetch наткнулся на не совсем понятный для меня кусок кода:
if ((str = malloc(((l + 2) / 3) * 4 + 1)) == NULL)
		return (NULL);


Это находится в функции http_base64 в самом её начале. Здесь происходит какое-то выравнивание? Или же это из-за длины base64 строки?
  • Вопрос задан
  • 4309 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Для представления строки из N 8-битных символов нужно (N * 8 / 6) = (N / 3 * 4) 6-битных символов (base 64).
(l + 2) / 3 это деление на 3 с округлением вверх, поскольку количество символов должно быть целым.
+ 1 — это для нуля в конце строки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@agmt
Оххх, разгадать выражение куда сложнее, чем понять, что там происходит, а всё из-за шрифта, в котором «1» так похожа на «l».
Ответ написан
Комментировать
barker
@barker
Ну да, по-моему всё очевидно. Вычисляется длина итоговой строки, которая относится к изначальной (а это l в этой формуле) как 4/3.
Ответ написан
Комментировать
@woolfcod
Здравствуйте.
Извините что в этой теме пишу.
Просто в создание вопроса,кнопка "публикация не доступна"

Вот какой вопрос:
Программа рекурсивно ищет файлы на дисках.
В программе выделяется память ,для запись в файл ..
Выделение
dword databuf = n;
auto buf = (byte*)malloc(databuf)
memcpy(buf,data,databuf)
Программа падает,отладчик кажет сюда
memcpy(buf,data,databuf);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы