Per inciso, il resto del programma contiene diversi errori o imprecisioni; ti scrivo una versione corretta: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; }
Nota che non l'ho provato, ma dovrebbe andare.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; }

Rispondi quotando