basename函数用法详解
basename函数简介
- 头文件包含
#include <libgen.h>
- 函数定义
char *dirname(char * path );
char *basename(char * path );
basename函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘basename’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <libgen.h>
basename函数详细描述
警告:有两个不同的函数basename ()-见下文。
函数dirname ()和basename ()将以空结尾的路径名字符串分解为目录和文件名组件。在通常的情况下,dirname ()返回直到(但不包括)final(aq/(aq)的字符串,而basename ()返回final(aq/(aq.Trailing(aq/(aq)后面的组件。
如果path不包含斜杠,则dirname ()返回字符串“。”如果path是字符串“/”,basename ()返回path 的副本,那么dirname ()和basename ()都返回字符串“/”。如果path是空指针或指向空字符串,那么dirname ()和basename ()都返回字符串“.”。
将dirname ()返回的字符串连接为“/”,并将basename ()返回的字符串生成一个完整的路径名。
dirname ()和basename ()都可以修改path 的内容,因此在调用这些函数中的一个函数时,可能需要传递一个副本。
这些函数可能会返回指向静态分配内存的指针,这些指针可能会被后续调用覆盖。或者,他们可以返回一个指向path 的某个部分的指针,这样path引用的字符串就不会被修改或释放,直到不再需要函数返回的指针为止。
下面的示例列表(摘自SUSv2)显示了dirname ()和basename ()为不同路径返回的字符串:.rs.ts lb lb lb ll l l l。路径dirnamebasename/usr/lib/usrlib/usr//usr usr.usr///&。..&.......Te.Re
basename函数返回值
dirname ()和basename ()都返回指向以空结尾的字符串的指针。(不要将这些指针传递到free (3))
basename函数其他说明
basename ()有两个不同的版本--上面描述的POSIX版本和GNU版本
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <string.h>
GNU版本从不修改它的参数,当path有尾随斜杠时,特别是当它是“/”时,返回空字符串。dirname ()没有GNU版本
使用glibc,当包含
basename函数使用举例
下面的代码片段演示了basename ()和dirname ():的用法
char *dirc, *basec, *bname, *dname;
char *path = "/etc/passwd";
dirc = strdup(path);
basec = strdup(path);
dname = dirname(dirc);
bname = basename(basec);
printf("dirname=%s, basename=%s\en", dname, bname);
评论区