typedef char* string;
Язык Си не имеет строкового типа. Указатель на символ не то же самое, что выделенная строка.
buffer[8]=(string*)malloc(sizeof(string));
Почему вы устанавливаете номер элемента 9 в буфере в строку? (C индексируется нулем, поэтому 0-8 = 9 пунктов). Это массив указателей? Возможно, вы хотели выделить буфер из 8 символов?
Нет смысла типизировать результат malloc на языке Си. В C ++ вам придется выполнять приведение.
Вы указываете размер указателя, а не размер буфера.
buffer[8]=sprintf(buffer[8],"%d",inf[i].mPermissions);
Первым аргументом sprintf должен быть выделенный буфер, а не символ (один элемент буфера).
printf("%s",buffer[8]);
Вы пытаетесь напечатать строку, но передаете элемент буфера (символа).
Чтобы подвести итог, я настоятельно рекомендую прочитать первые главы книги по языку C, касающиеся массивов и указателей , прежде чем пытаться использовать любую форму обработки строк или динамического выделения памяти. Если вы не знаете, как что-то работает, не рискуйте синтаксисом.