I'm trying to construct and return a string in C, but running into a function returns address of local variable [-Wreturn-local-addr] compiler warning.  I get that returning packet like I'm trying to do won't work, because packet is a pointer to the beginning of my chars of size packet_size, and that memory address isn't valid outside my function.  I'm running on an AVR chip and don't want to use malloc.  How should I go about solving this problem?
#include <stdio.h>
#include <string.h>
#include <stdint.h>
const char* construct_packet(const char* data);
void append(char* str, char c);
int main()
{
    const char* my_packet = construct_packet("QERT");
    printf("%s", my_packet);
    return 0;
}
const char* construct_packet(const char* data)
{
    const char training_chars[] = "___";
    const char start_char = '>';
    uint8_t checksum = 0;
    for(uint16_t i = 0; i < strlen(data); i++) {
        checksum += data[i];
    }
    const char checksum_char = checksum;
    uint8_t packet_size = strlen(training_chars) + strlen(data) + 2; // Plus 2 for start byte and checksum byte
    char packet[packet_size];
    strcat(packet, training_chars);
    append(packet, start_char);
    strcat(packet, data);
    append(packet, checksum_char);
    return packet;
}
void append(char* str, char c)
{
    str[strlen(str) + 1] = c;
}
 
     
    