Я очень смущен, так как ваш опубликованный код не имеет абсолютно никакого отношения к проблеме, о которой вы говорите.(Хорошо, они оба используют строки, но это все)
char* src = "Hello, ";
char* dest = "World!";
char* temp;
temp = malloc(strlen(src) +strlen(dest) + 1);
strcpy(temp, src);
strcat(temp, dest);
dest = temp;
Если dest не является фиксированным буфером соответствующего размера для объединенной строки.Если это так, то замените последнюю строку на:
strcpy(dest, temp);
free(temp);
Теперь, если вы хотите специально построить список цифр назад, давайте попробуем другой такт:
char buffer[10];
buffer[9] = '\0'; // null terminate our string.
char* output;
int i;
for(i = 9; i > 0; i--)
{
// this is a fast way of saying, sprintf("%u", i);
// works only for single digits
char d = (char)('0' + i);
buffer[i-1] = d;
output = &buffer[i-1];
printf("%s", output);
}