PDA

View Full Version : [C] Aiuto creare file (DEVC++)


ivan p
30-06-2009, 18:08
Il codice che segue dovrebbe creare un file. L'intenzione č quella di passare il nome del file alla procedura acquisendolo dal main. Non commette errori in compilazione ma quando lo eseguo non appena premo invio (subito dopo aver inserito il nome del file) appare l'avviso di segnalazione di errore a microsoft. Grazie in anticipo.

#include<stdio.h>

void creaFile(char *name){
FILE *fp;
fp = fopen(name, "wb");
if (fp==NULL) printf("\nErrore:file non creato");
getchar();
}

main(){
char *FileName;
printf("\nInserisci il nome del File: ");
gets(FileName);
creaFile(FileName);
}

Vincenzo1968
30-06-2009, 18:32
Devi allocare lo spazio per la variabile FileName. Ti consiglio, inoltre, di usare fgets al posto di gets:


#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 256

void creaFile(char *name)
{
FILE *fp;

fp = fopen(name, "wb");
if (fp==NULL)
{
printf("\nErrore: file '%s' non creato", name);
return;
}

fclose(fp);
}

int main()
{
int len;
char FileName[BUFFER_SIZE];

printf("\nInserisci il nome del File: ");

fgets(FileName, BUFFER_SIZE - 1, stdin);

len = strlen(FileName);

/* Togliamo il newline finale */
if ( len > 0 && FileName[len - 1] == '\n' )
FileName[len - 1] = '\0';

creaFile(FileName);
}

ivan p
30-06-2009, 18:40
Premettendo che ho iniziato a programmare da poco:
potresti spiegarmi il codice dalla riga che inizia con "len"?

||ElChE||88
30-06-2009, 18:44
Premettendo che ho iniziato a programmare da poco:
potresti spiegarmi il codice dalla riga che inizia con "len"?
Se intendi:
len = strlen(FileName);
La funzione strlen calcola la lunghezza della stringa che riceve in input.

PS: Ti consiglio di cambiare ambiente di sviluppo, Dev-Cpp č obsoleto e buggato; ci sono ottime alternative gratuite come Code::Blocks o Visual C++ Express (funziona anche col C).

ivan p
30-06-2009, 18:51
So come funziona la funzione srtlen, ho detto che non avevo capito il codice dalla riga "len", non solo quella riga. Non capisco cosa fa e a quale scopo lo fa l' if.

Utilizzo il DevC++ perchč il nostro prof ci fa usare questo ed č lo stesso che userņ per l'esame.

||ElChE||88
30-06-2009, 18:53
So come funziona la funzione srtlen, ho detto che non avevo capito il codice dalla riga "len", non solo quella riga. Non capisco cosa fa e a quale scopo lo fa l' if.
Se l'ultimo carattere č '\n' (a capo) lo sostituisce con '\0' (carattere nullo, il carattere per terminare una stringa). len serve per trovare l'ultimo carattere, cosa che si puņ fare solo conoscendo la lunghezza della stringa digitata dall'utente.
Utilizzo il DevC++ perchč il nostro prof ci fa usare questo ed č lo stesso che userņ per l'esame.
Mi spiace per voi. :(

ivan p
30-06-2009, 18:58
Mi spiace per voi.
Anche a me non appena faccio l'esame mi sposto su linux. Grazie mille

Vincenzo1968
30-06-2009, 19:14
Se l'ultimo carattere č '\n' (a capo) lo sostituisce con '\0' (carattere nullo, il carattere per terminare una stringa). len serve per trovare l'ultimo carattere, cosa che si puņ fare solo conoscendo la lunghezza della stringa digitata dall'utente.
...


Esatto.

Questa operazione č necessaria perchč la funzione fgets pone anche il carattere '\n' nella stringa e, quindi, la funzione creaFile darebbe errore se non lo togliessimo.