Depende de cómo hayas configurado la entrada en el registro, esto es, de qué forma el sistema operativo le pasa al programa el nombre del archivo. Lo normal es pasarlo a través de la línea de comandos, recogiéndolo en los parámetros de "main".
Código:
/* Ejemplo de manejo de parámetros. */
#include<stdio.h>
#include<stdlib.h> /* EXIT_SUCCESS y EXIT_FAILURE. */
/* El SO. se encarga de pasar los parámetros a main.
El parámetro 0 suele ser el ejecutable junto con su ruta. */
int main (int NumArgumentos, char *Argumentos[])
{
int Ndx;
for (Ndx=0; Ndx<NumArgumentos; Ndx++)
printf ("Argumento %d: '%s'.\n", Ndx, Argumentos[Ndx]);
/* main debería devolver siempre un valor. */
return EXIT_SUCCESS;
}
Código:
$ ./ejemplo.exe
Argumento 0: './ejemplo.exe'.
$ ./ejemplo.exe lol ejemplo y tal
Argumento 0: './ejemplo.exe'.
Argumento 1: 'lol'.
Argumento 2: 'ejemplo'.
Argumento 3: 'y'.
Argumento 4: 'tal'.