侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

basename函数用法详解

noerror
2022-10-04 / 0 评论 / 0 点赞 / 35 阅读 / 678 字 / 正在检测是否收录...

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 ()的POSIX版本,否则将获得GNU版本。

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);
0

评论区