View Full Version : [C]mkdir crea cartelle con nome seguito da punto interrogativo
santaclause83
20-04-2007, 15:55
salve,sto scrivendo un piccolo programma c che prende come input un file di testo dove su ogni riga legge un nome(con fgets ad esempio) e vi dedica una cartella con mkdir.
il problema è che una volta create le cartelle,queste hanno il nome seguito da un assurdo punto interrogativo..
ho provato a stampare passo passo le letture sul file e i vari concatenamenti di stringhe e al contrario,stampano correttamente.
avete qualche idea a riguardo?
grazie mille,nicholas
il problema è che una volta create le cartelle,queste hanno il nome seguito da un assurdo punto interrogativo..
ho provato a stampare passo passo le letture sul file e i vari concatenamenti di stringhe e al contrario,stampano correttamente.
avete qualche idea a riguardo?Sei sempre su Linux, vero? (visto che parlavi di permessi nell'altro thread). Non vedendo il codice è difficile dire cosa non va. Se dici che hai già verificato le stringhe ... mi fido, le uniche domande che mi vengono in mente sono: succede per qualunque stringa? ci sono caratteri accentati o speciali nelle stringhe?
Non è che prendi per sbaglio anche l' \n o l' \r ?
santaclause83
23-04-2007, 15:21
i nomi sono tutti regolari,senza caratteri ambigui,vi allego il codice che legge e crea le sottocartelle:
from-->nome file da cui leggere i nomi
into-->path iniziale dove concatenare via via i nomi letti dal file per creare le sottocartelle
void creasottocart(char *from,char *into)
{
int i;
char *prefisso;
char buf[BUFSIZE];
FILE *fp;
if((fp = fopen(from,"r")) == NULL){printf("file inesistente \n");exit(1);}
/*prende il nome di ogni riga del file 'userlist' e lo concatena alla directory inserita come parametro*/
prefisso = (char *)malloc(sizeof(char)*(strlen(into)+1));
if(prefisso == NULL)
{
printf("Memoria esaurita \n");
exit(1);
}
prefisso = strcpy(prefisso,into);
i = 1;
while(fgets(buf,256,fp) != NULL){
printf("iterazione numero %d \n",i); //stampe di controllo
printf("nome letto da file : %s \n",buf);
strcat(into,"/");
strcat(into,buf);
printf("cartella da creare :%s \n",into);
if (mkdir(into,0777) == -1){printf("cartella %s creata in una sessione precedente",buf);}
i++;
strcpy(into,prefisso);
}
fclose(fp);
}
credo che l'errore debba aggirarsi per forza da queste parti,altrimenti vi spedisco anche il main,fate sapere
grazie,nicholas
while(fgets(buf,256,fp) != NULL){
printf("iterazione numero %d \n",i); //stampe di controllo
printf("nome letto da file : %s \n",buf);
strcat(into,"/");
strcat(into,buf);
printf("cartella da creare :%s \n",into);
if (mkdir(into,0777) == -1){printf("cartella %s creata in una sessione precedente",buf);}Confermo in pieno la ipotesi di whiles_
Il funzionamento della fgets è ben chiaro e ormai dovrebbero saperlo pure i muri!! fgets deposita nel buffer anche il carattere '\n' (codice 0x0A) che indica il fine linea. Questo solo nel caso in cui caratteri + '\n' + '\0' stiano nel buffer. Altrimenti fgets deposita solo una parte della riga (sempre terminata dal nullo) e il resto della linea verrà letto dalla/e successiva/e fgets.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.