接收到完整路径后,API 应该返回基本文件名。例如, "/foo/bar.txt" --> "bar.txt"。
有一个basename()函数。
将路径(以char*
形式表示)作为参数传递给它,它将返回另一个char*
形式的基本名称(即您想要的文件/目录的名称)。
编辑:
我忘了告诉你,POSIX版本的basename()
会修改其参数。如果您想避免这种情况,可以在源代码中添加GNU版本的basename()
。
#define _GNU_SOURCE
#include <string.h>
在这个版本的basename()
中,如果你传入例如/usr/bin/
这样以斜杠结尾的路径,它会返回一个空字符串。
#include <string.h>
char *basename(char const *path)
{
char *s = strrchr(path, '/');
if (!s)
return strdup(path);
else
return strdup(s + 1);
}
您需要使用basename()函数,这个函数几乎在任何类POSIX系统中都可以使用:
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
$
basename("/foo/bar/")
。 - falstrochar *basename(char const *path) { char *s = strrchr(path, '/'); if(s==NULL) { return strdup(path); } else { return strdup(s + 1); } }
!s
是惯用的C代码,相比之下s==NULL
是多余的。 - syockit
include
应该是<libgen.h>
。 - S3DEV