View Full Version : [C]avere nome eseguibile
andros94
24-04-2012, 17:30
ho un problema con un programma per win che sto scrivedo...ho necessita di avere il nome dell' eseguibile, ho bisogno di una funzione simile a GetModuleFileName () ma senza percorso completo solo il nome del programma
qualcuno puo aiutarmi ?? :)
clockover
24-04-2012, 20:31
int main(int argn, char ** argp){
printf("%s\n", argp[0]);
}
char ** argp contiene gli argomenti passati da linea di comando e il primo argomento, cioč l'elemento argp[0] č il nome dell'eseguibile
__ZERO_UNO__
24-04-2012, 22:04
Ho pensato che potevi usare __FILE__, che funziona anche con file di libreria, ma vuoi il nome del file compilato. :P
andros94
25-04-2012, 09:30
int main(int argn, char ** argp){
printf("%s\n", argp[0]);
}
char ** argp contiene gli argomenti passati da linea di comando e il primo argomento, cioč l'elemento argp[0] č il nome dell'eseguibile
con questo codice mi viene stampato il pecoso del eseguibile, non il nome :mad:
clockover
25-04-2012, 10:10
con questo codice mi viene stampato il pecoso del eseguibile, non il nome :mad:
si ma quel percorso non comprende anche il nome dell'eseguibile?
andros94
25-04-2012, 10:52
a me serve SOLO il nome dell' eseguibile, altrimenti avrei usato la funzione GetModuleFileName()
lorenzo001
25-04-2012, 13:02
a me serve SOLO il nome dell' eseguibile, altrimenti avrei usato la funzione GetModuleFileName()
Parti dalla stringa con il percorso e con qualche riga arrivi al nome
char *name = strrev(argv[0]);
*(strchr(name, '\\')) = 0;
strrev(name);
printf("%s\n", name);
In ogni caso, la GetModuleFileName lavora solo con Windows.
andros94
25-04-2012, 13:50
grazie per il codice...funziona, ma non ho capito cosa fa essattamente questa riga
*(strchr(name, '\\')) = 0;
lorenzo001
25-04-2012, 19:45
Cerca il primo carattere \ nella stringa e lo sostituisce con un NUL
clockover
25-04-2012, 20:10
Anche una cosa del genere altrimenti
char * tmp = argp[0] + (strlen(argp[0]) - 1);
while(*(tmp - 1) != '/')*tmp--;
sono su linux per questo ho utilizzato '/' per l'esempio
Puoi usare la funzione basename (presente in linux e mingw32) oppure la _split (presente solo su windows) http://msdn.microsoft.com/en-us/library/e737s6tf.aspx
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.