总览
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
说明
函数以 '/' 为分隔符
 
dirname
获取文件的路径
没有 '/' 的时候返回的是 "."
注意: dirname 会修改 path中的数据
 
basename
获取文件的名称
 
示例:
path        dirname    basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
代码:
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <string.h> int main ( int argc, char *argv[] )
{
char *str = "/root/workdir/haha.txt";
char buf[] = {}; strncpy (buf, str, strlen(str)); //dirname 会修改buf中的值,所以需要一个缓冲区
//直接调用dirname(str), 会使程序崩溃
printf ("dirstr is:%s\n", dirname(buf));
printf ("dir buf is:%s\n", buf); //basename 不会修改buf中的值,以下两次调用都是可以的
strncpy (buf, str, strlen(str));
//1次
printf ("test1 basename is:%s\n", basename(buf));
printf ("name buf is:%s\n", buf); //2次
printf ("test2 basename is:%s\n", basename(str)); return ;
}

补充:

 利用 strrchr 获取文件扩展名称(后缀)

#include <stdio.h>
#include <string.h> int main ( int argc, char *argv[] )
{
char *str = "/hah/test/test.hah.dd.json";
char *suffix = strrchr (str, '.');
printf ("suffix is:%s\n", suffix);
return ;
}
 
 
 

最新文章

  1. Mysql触发器
  2. 用int类型表示最大公倍数
  3. 20135223/20135234/20135229小组——亚博 Arduino智能小车实践报告
  4. Sql Server CONVERT获取当前日期及日期样式
  5. Regmon7.04绿色版(注册表变动实时监视工具)
  6. VueJs开发笔记—IDE选择和WebStorm性能优化、框架特性和数据调用、路由选项以及使用
  7. Java~时间戳小知识
  8. kettle使用笔记1--基本安装和使用
  9. pagehelper 使用
  10. BZOJ 3745
  11. Linux下的awk文本分析命令实例(二)
  12. python 实现 Fortran的读取10*0以及换行读问题
  13. Linux安全配置步骤简述
  14. JS代码排版工具
  15. python 发送邮件+多人+附件 最好用!!!
  16. 用 CSS 实现三角形与平行四边形
  17. JAVA JDBC 简单的增删改查
  18. Ubuntu 安装 Zabbix 3.2详细步骤
  19. dede:channel二级导航currentstyle属性失效问题
  20. install ros-indigo-map-msgs

热门文章

  1. 九度OJ 1032:ZOJ (基础题)
  2. java中final与static的使用场景
  3. 【题解】[JSOI2008]最大数
  4. 如何使用doctrine:migrations:migrate
  5. 获取原生的DOM方式,DIY脚手架,vue-cli的使用
  6. CentOS已经安装命令,但提示找不到
  7. Linux线程的几种结束方式
  8. 获取HDC的几种方法
  9. debian7 amd64版本添加对x86包的支持
  10. 打开Vs2010时,卡在加载工具箱内容 不动了