|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
[C]mkdir crea cartelle con nome seguito da punto interrogativo
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 |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
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 |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:58.