Remover la extensión de un nombre de archivo

Hace poco en los foros de SoloCodigo, se planteó una duda sobre cómo eliminar la extensión de un nombre de archivo guardado en un vector de caracteres (cadena de texto en lenguaje C), por ejemplo, de “datos.dat” obtener solamente “datos”.

Una forma efectiva es recorrer cada caracter y copiarlo a otra variable hasta que nos encontremos con el punto:

char nombre[ 15 ] = "datos.dat";
char copia[ 15 ];
 
for ( int i = 0; i < strlen( nombre ); i++ ) {
	// Copia caracteres mientras no sean '.'
	if ( nombre[ i ] != '.' ) {
		copia[ i ] = nombre[ i ];
	}
	else {
		// Agrega el caracter nulo a la cadena copia (opcional)
		copia[ i ] = '\0';
		// Sale del ciclo for
		break;
	}
}

Si no nos interesara conservar la variable original, en lugar de copiar a otra variable podríamos recorrer la original y sustituir el caracter ‘.’ por ‘\0’ para indicar que ahí finaliza la cadena.

Aunque la opción que prefiero es utilizar la función strtok de la biblioteca string:

#include <stdio.h>
#include <string.h>
 
int main() {
	char nombre[] = "datos.dat";
	printf( "nombre: %s\n", nombre );
 
	strtok( nombre, "." );
	printf( "nombre: %s\n", nombre );
 
	return 0;
}

La función strtok modifica la variable original, por lo que si quisiéramos conservarla antes se debería hacer una copia de la misma.

Leave a Reply