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.