Newsgroup: it.comp.lang.c
Titolo: passare un file come parametro e capire la sua estensione

Ho scritto questo codice, che funziona, ma mi sembra qualche cosa di
palesemente sbagliato:
[...]
	estensione 		= malloc(sizeof(char));
	file_name_length = strlen(argv[1]);
	*(estensione) 	= argv[1][file_name_length - 3];
	*(estensione+1) = argv[1][file_name_length - 2];
	*(estensione+2) = argv[1][file_name_length - 1];
	if (!strcmp(estensione, "txt"))
	{
		[...]
	}
[...]
Domanda: in che modo, passando il nome di un file come parametro,
posso verificare che estensione ha?
Nel mentre che scrivevo sono arrivato a questa conclusione:
	int i;
	char *estensione;
	estensione=malloc(sizeof(char)*3);
	for(i=0;i<4;*(estensione+i)=argv[1][strlen(argv[1])-4+i],i++);
	if(!strcmp(estensione,".txt"))
	[...]
PS. Scusate il for virtuoso e sicuramente poco comprensibile da
leggere =) ma mi piace programmare così. Ovviamente si tratta di un
progettino universitario e penso proprio che alla consegna il codice
sarà pieno di parentesi graffe, commenti e quant'altro.
In ogni caso... questa seconda.. vi sembra una buona soluzione?

 
.z
Enrico

 	estensione 		= malloc(sizeof(char));
?

Andrea D'Amore wrote:

questo codice è future-proof! Ancora un giorno decideranno che
sizeof(char) != 1 byte :p
-- 
By ZeD

 posso verificare che estensione ha?
Forse mi sfugge qualcosa, ma non puoi usare strrchr?
Cristiano 


Eh, potrei fare un sacco di cose, come programmare seriamente =).
Purtroppo sono rivolto al php e sto programmando C solo per un
elaborato da consegnare per poter dare un esame. Cmq sia so che il
programma deve accettare file con estensione .txt se deve comprimere
e .rle se deve decomprimere.
@Tetsuya,@Enrico Bassetti: beh, a me interessano gli ultimi 4
caratteri proprio perchè mi aspetto che i file passati come parametro
siano o ".txt" o ".rle". In tutti gli altri casi chiudo l'applicazione
con un banale messaggio che indica il corretto uso del programma.
@Andrea D'Amore: uso la malloc perchè ... perchè credevo che fosse
l'unico modo di fare quel codice. Ho fatto una "cxxxxa pazzesca"?
@Vito 'ZeD' De Tullio: mi hai scritto che il codice "estensione =
malloc(sizeof(char));" è future-proof! =(. Non so che vuoi dire. Non
so se dopo l'elaborato appropondirò ulteriormente il C. In quel caso
ti/vi chiedo scusa per "momenti di ignoranza" da parte mia :-p. Sia
dal punto di vista del codice che della terminologia. Vengo da php ed
è come se fossi a zero con il C.
@Cristiano: mmm credo tu abbia ragione, anche se quel for mirabolante
mi piace da matti. Lo ammetto: a volte mi piace più il codice di
fantasia che il codice performante. Grazie cmq per l'osservazione: ne
terrò conto in seguito.
PS. Grazie davvero a tutti per le risposte.

 l'unico modo di fare quel codice. Ho fatto una "cxxxxa pazzesca"?
No ma allocati spazio per 4 char dato che poi quello spazio lo usi.
Inoltre hai scelto un modo strano per prendere gli ultimi 3 char, perché 
strcmp() sì e strcpy() no?

 strcmp() sì e strcpy() no?
=( non mi viene in mente come usarli. Sono un programmatore empirico.
Quando vedo nuove e migliori soluzioni cerco di adottarle sempre.
Tieni conto che è come se programmassi C da 2 settimane. Ti sembrerà
banale, ma li per li non mi era venuto in mente di usare strcmp() sì e
strcpy() =). Non usando mai C non mi ricordavo avesse funzioni del
genere. Mi rifarò con il tempo.

 leggere =) ma mi piace programmare così. Ovviamente si tratta di un
non e' virtuoso, e' una merda.
Il codice DEVE essere leggibile oltre che funzionante, specialmente
per un esame.
Ciao Jack