Ваша проблема просто одна из приоритетных. Оператор []
имеет более высокий приоритет, чем унарный - *
, поэтому строка анализируется, как если бы она была:
*(Buffer[2]) = 'A';
... это не то, что вы хотите. Вы на самом деле хотите, чтобы *
был первым, поэтому вам нужно использовать паразиты:
(*Buffer)[2] = 'A';
Кроме того, ваш strncpy()
звонок неправильный. strncpy()
не обнуляет результат, если количество скопированных символов равно длине; и поскольку ваша память исходит прямо из malloc()
, там, возможно, уже нет нуль-терминатора. strncpy()
на самом деле неправильный инструмент в 99,99% случаев, с которыми вы столкнетесь - поищите на этом сайте множество других ответов, объясняющих почему.
Вместо этого можно использовать вызов strncat()
:
(*Buffer)[0] = '\0'; /* Truncate to an empty string */
strncat(*Buffer, Text, 5);