codice:
char buffer[PATH_MAX];
if(snprintf(buffer, sizeof(buffer),"%s/ex %d-%d",Percorso,i,Pagina)<=0)
{
    puts("Errore: impossibile creare la stringa del percorso");
    return EXIT_FAILURE;
}
Per inciso, il resto del programma contiene diversi errori o imprecisioni; ti scrivo una versione corretta:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include <sys/stat.h>
#include <sys/types.h>

int main()
{
    int NumeroInizio,i,NumeroUltimo,Pagina;
    char Risposta,PercorsoBase[PATH_MAX],PercorsoCompleto[PATH_MAX];

    do
    {
        printf("Ciao. Inserisci il primo esercizio e l'ultimo\n([primo numero] [ultimo numero] [pagina]): ");
        /* scanf retituisce il numero dei campi correttamente acquisiti;
         se qui è diverso da 3 almeno uno non è stato inserito bene */
        if(scanf("%d %d %d",&NumeroInizio,&NumeroUltimo,&Pagina)!=3)
        {
            /* Se non hai formattazioni strane da fare puts è più rapida di printf,
             e ti mette al riparo da potenziali problemi */
            puts("Dati non inseriti correttamente, riprova.");
            continue;
        }
        printf("\nInserisci il percorso dove creare le CARTELLE: ");
        /* scanf("%s", ...) è potenziale causa di buffer overflow (senza contare
         che stavi specificando come secondo argomento una roba inguardabile) */
        if(fgets(PercorsoBase, sizeof(PercorsoBase))==NULL)
        {
            /* Se fgets restituisce NULL ci sono stati problemi di lettura;
             dato che qui non ci si può più fare nulla, esce e segnala l'errore grave sullo standard error */
            fputs("Errore di lettura.", stderr);
            /* EXIT_FAILURE è una macro che specifica il codice di errore di default
             per l'esecuzione terminata con errori */ 
            return EXIT_FAILURE;
        }
        printf("Confermi la creazione delle directory: %s/ex %d pag %d\na ex %d pag %d ?(s/n) ",Percorso,NumeroInizio,Pagina,NumeroUltimo,Pagina);
        risposta=getche();
        putchar('\n');
    } while(tolower(risposta)!='s'); /* tolower converte le maiuscole in minuscole; inoltre confrontando per uguaglianza con 'n', nel caso in cui l'utente avesse inserito altri caratteri sarebbe andato avanti lo stesso */

    /* Il for è molto più adatto del while in questo contesto */
    for(i=NumeroInizio; i<=NumeroUltimo; i++)
    {
        if(snprintf(PercorsoCompleto, sizeof(buffer),"%s/ex %d-%d",PercorsoBase,i,Pagina)<=0)
        {
            fputs("Impossibile creare la stringa del percorso.", stderr);
            return EXIT_FAILURE;
        }
        /* Crea la directory con i permessi di default */
        if(mkdir(PercorsoCompleto,PERM_DIRECTORY)==-1)
        {
            /* Si è verificato un errore, lo stampa preceduto dal testo specificato */
            perror("Impossibile creare la cartella");
            return EXIT_FAILURE;
        }
    }
    /* EXIT_SUCCESS è una macro che specifica il codice di errore di
     default per l'esecuzione terminata correttamente */
    return EXIT_SUCCESS;
}
Nota che non l'ho provato, ma dovrebbe andare.