Newsgroup: it.comp.lang.c
Titolo: passare il file al programma

Salve,
ho windows 98 ed il dev c++ 4.9.9.2 .
mi serve un grande aiuto.
Per passare al programma C, il nome del file: "c:\documenti\suono.wav" su
cui agire,  non so come
 fare.
Ecco le mie tre ipotesi, nessuna delle quali riesco a fare funzionare.
Eppure il compilatore non mi rileva errore (solo warning) in nessuna fra le
tre ipotesi.
***************************
1^° ipotesi
passo il nome del file al main, nell'interfaccia utente:
#include <stdio.h>
int main(int argc, char *argv[1])
{
FILE *p_file;
p_file=fopen(argv[1], "rb");
getchar();
}
*****************************
2^° ipotesi
scrivo il nome del file già dentro il codice c:
#include <stdio.h>
int main()
{
char *p_nome="c:\documenti\suono.wav";
FILE *p_file;
p_file=fopen(p_nome, "rb");
getchar();
}
****************************
3° ipotesi
passo il nome del file per mezzo della scanf():
#include <stdio.h>
int main()
{
char *p_nome;
FILE *p_file;
printf("dammi il percorso del file\n");
scanf("%s", p_nome);
p_file=fopen(p_nome, "rb");
}
Qualcuno sa indicarmi come fare funzionare almeno una(tutte e tre sarebbe
l'ideale) le tre
 ipotesi?
grazie,
adriano

 tre ipotesi.
In che senso non riesci a farli funzionare? Se ti da solo warning, che
warning ti da? Ma soprattutto, nel tuo codice non vedo nessuna azione
di stampa in uscita. Come fai a dire che per esempio, la tua prima
ipotesi non funzioni? eppure dovrebbe eccome (sempre che tu passi
almeno un parametro sulla linea di comando.)

 
Occhio ai buffer overflow. Io non la userei perchè è scomoda, non sempre 
l'utente si ricorda della posizione corretta del file.
Un'altra soluzione potrebbe essere un file di configurazione.
-- 
"Le opinioni dei fanatici prescindono dai fatti"
python -c "print 'bG9ybWF5bmFAZ21haWwuY29t'.decode('base64')"
Linux Registered User: 461615
http://lmainardi.blogspot.com

 }
Questa è la migliore. Per passare il nome di un file all'eseguibile 
basta spostare l'icona del file sull'icona dell'eseguibile.
Prima di utilizzare argv[1] devi però controllare che argc sia maggiore 
di 1.
E.

warning ti da?
il warning me lo dà solo nella seconda ipotesi
(invece la prima e terz ipotesi sono ok):
#include <stdio.h>
int main()
{
char *p_nome="c:\documenti\suono.wav";
FILE *p_file;
p_file=fopen(p_nome, "rb");
getchar();
}
Eccoli i due warning:
4:14 C:\Documenti\a1.cpp [Warning] unknown escape sequence '\d'
4:14 C:\Documenti\a1.cpp [Warning] unknown escape sequence '\s'
la riga 4 oggetto dei due warning è quella che contiene:
char *p_nome="c:\documenti\suono.wav";
grazie,
adriano

grazie a tutti.
ho riscritto il sofware per leggere i file:
 # include <stdio.h>
 # include <stdlib.h>
int main ( int argc, char *argv[] )
{
if (argc>1)
{
FILE *fp_in = fopen(argv[1],"rb");
 if (fp_in == NULL)
 {
  printf( "Unable to open file: %s.\n",argv[1]);
  return( -1 );
 }
 else printf("il programma funziona\n");
}
else printf("parametro mancante\n");
getchar();
}
gli passo il nome (e percorso) del file, senza entrare in dos, ma faccio,
dentro il dev c++:
 esegui->parametri-> scrivo il nome, percorso, ed estensione del file, in
questo campo vuoto.
ebbene, ho constatato che:
a)se il nome del file non contenga al suo interno lo spazio, allora,
mandandolo in esecuzione,
 la finestra dos rimane aperta con la scritta: " il programma funziona"
b)se il nome del file contenga al suo interno lo spazio, allora, mandandolo
in esecuzione,
 la finestra dos si richiude subito, e non faccio in tempo a leggerla.
c)se io passo il percorso ed il nome del file, ma non ne indico la
estensione (per
 esempio scrivo c:\documenti\suono anzichč c:\documenti\suono.wav) allora
mandandolo in
 esecuzione, la finestra dos si richiude subito, e non faccio in tempo a
leggerla.
ora io vi chiedo:
1)Perchč si verifica questo fenomeno?
2)come č possibile passare al programma il nome del file che contenga lo
spazio al
 suo interno?
c'č una altra stranezza: ?manu* mi ha suggerito: "Per passare il nome di un
file all'eseguibile
basta spostare l'icona del file sull'icona dell'eseguibile".
Ebbene, se io impieghi questa altra tecnica, allora, in ogni caso, anche se
il nome del file
 contenga al
suo interno lo spazio, la finestra dos rimane aperta con la scritta: "il
programma funziona".
E non ci sono le problematiche presenti con l'altro modo di passare i
parametri.
Come si spiega?
grazie,
adriano

 4:14 C:\Documenti\a1.cpp [Warning] unknown escape sequence '\s'
Devi mettere "\\" in una stringa se vuoi ottenere una "\".
E.

 Come si spiega?
Perchè quando indichi i nomi dalla riga di comando o con Dev-Cpp i 
parametri vengono separati proprio dai caratteri di spaziatura.
E.