2011-03-15 10 views
19

¿Cómo se obtiene una extensión de archivo (como .tiff) desde un nombre de archivo en C?Obteniendo la extensión de archivo en C

Gracias!

+0

duplicado posible de [extensión de archivo Ponerse en lenguaje C] (http://stackoverflow.com/questions/3035225/getting- file-extension-in-c-language) – nibot

Respuesta

48
const char *get_filename_ext(const char *filename) { 
    const char *dot = strrchr(filename, '.'); 
    if(!dot || dot == filename) return ""; 
    return dot + 1; 
} 

printf("%s\n", get_filename_ext("test.tiff")); 
printf("%s\n", get_filename_ext("test.blah.tiff")); 
printf("%s\n", get_filename_ext("test.")); 
printf("%s\n", get_filename_ext("test")); 
printf("%s\n", get_filename_ext("...")); 
+0

Después de 'dot = strrchr (filename, '.');', 'dot! = NULL' implica que' * dot == '.'' entonces tu prueba debería ser simplemente 'if (punto)'. –

+0

Recibo un error: 'renamer.c: 11: advertencia: declaración implícita incompatible de la función incorporada 'strrchr'' – errorhandler

+1

' #include ' – ThiefMaster

6

Puede usar la función strrchr, que busca la última aparición de un carácter en una cadena, para encontrar el punto final. Desde allí, puede leer el resto de la cadena como la extensión.

13

Encontrar el último punto con strrchr, entonces avanzar 1 carácter

#include <stdio.h> /* printf */ 
#include <string.h> /* strrchr */ 

ext = strrchr(filename, '.'); 
if (!ext) { 
    /* no extension */ 
} else { 
    printf("extension is %s\n", ext + 1); 
} 
+0

No hay necesidad de copiarlo; devolverá una parte de la cadena que termina con el final de la cadena original, por lo que no es necesario realizar modificaciones. – ThiefMaster

+0

Copiar eliminado, gracias – pmg

Cuestiones relacionadas