Variables declared in code are saved to the heap, requiring limits, but data can be put into the heap for varying limits, like user input.
Bytes are allocated with malloc(<bytes>) and reallocated with realloc(<variable>, <bytes>).
Memory must be freed with free(<variable>) at the end of the program, but can exist outside of the context.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
char *msg;
// Initial message added to memory using malloc and strcpy
msg = (char *) malloc(12);
strcpy(msg, "Hello there");
printf("Message: %s\nAddress: %u\n\n", msg, *msg);
// Updating message in memory using realloc and strcat
msg = (char *) realloc(msg, 26);
strcat(msg, " from SANS Foundations");
printf("Message: %s\nAddress: %u\n\n", msg, *msg);
// Free up the memory!
free(msg);
return(0);
}