C'è basename() .
Alimentalo con un percorso (sotto forma di char*
) e ti restituirà il nome di base (ovvero il nome del file/directory che desideri) sotto forma di un altro char*
.
MODIFICA:
Ho dimenticato di dirti che la versione POSIX di basename()
modifica il suo argomento. Se vuoi evitare questo puoi usare la versione GNU di basename()
anteponendo questo nella tua fonte:
#define _GNU_SOURCE
#include <string.h>
In cambio questa versione di basename()
restituirà una stringa vuota se la alimenti con, ad es. /usr/bin/
a causa della barra finale.
Vuoi basename(), che dovrebbe essere presente praticamente su qualsiasi sistema POSIX-ish:
http://www.opengroup.org/onlinepubs/000095399/functions/basename.html
#include <stdio.h>
#include <libgen.h>
int main() {
char name[] = "/foo/bar.txt";
printf("%s\n", basename(name));
return 0;
}
...
$ gcc test.c
$ ./a.out
bar.txt
$
#include <string.h>
char *basename(char const *path)
{
char *s = strrchr(path, '/');
if (!s)
return strdup(path);
else
return strdup(s + 1);
}