This is a program that's supposed to read inputs, a number 'n' and a character, and then duplicate this character n times. It works perfectly fine, but when I enter a large number, 8+ for example, it duplicates perfectly but then adds garbage values to the end. I can't get why it does that since I used malloc and I have exactly n blocks saved for me in the memory.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* create_string (char ch, int n);
void main ()
{
    int n;
    char ch;
    printf("Enter number for duplicates: ");
    scanf("%d",&n);
    printf("Enter a letter: ");
    scanf(" %c", &ch);
    printf("The letter '%c' duplicated %d times is: ",ch,n);
    char* ptr=create_string(ch,n);
    printf("%s",ptr);
}
char* create_string (char ch, int n)
{
    char* dup=(char*)malloc(n*sizeof(char));
    int i;
    for (i=0; i<n; i++)
    {
        dup[i]=ch;
    }
    return dup;
}
Test run:

 
     
    