首先介绍一些查找字符的函数

1、strrchr

头文件:#include <string.h>

strrchr() 函数用于查找某字符在字符串中最后一次出现的位置,其原型为:
    char * strrchr(const char *str, int c);

【参数】str 为要查找的字符串,c 为要查找的字符。

strrchr() 将会找出 str 字符串中最后一次出现的字符 c 的地址,然后将该地址返回。

注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

【返回值】如果找到就返回该字符最后一次出现的位置,否则返回 NULL。

返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。

2、strchr

头文件:#include <string.h>

strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
    char * strchr (const char *str, int c);

【参数】str 为要查找的字符串,c 为要查找的字符。

strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。

注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。

返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。

提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。

3、strstr

头文件:#include <string.h>

strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
    char *strstr( char *str, char * substr );

【参数说明】str为要检索的字符串,substr为要检索的子串。

【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

例子1:

#include<string.h>
#include<stdio.h>
char *find_file_name(const char *name)
{char *name_start = NULL;int sep = '/';if (NULL == name) {printf("the path name is NULL\n");return NULL;}name_start = strrchr(name, sep);return (NULL == name_start)?name:(name_start + 1);
}
int main(void)
{char string[15],mypath[66]={0};char*ptr,c='r';char filepath[]="/home/linux_c/hello.c";strcpy(string,"Thisisastring");ptr=strchr(string,c);if(ptr)printf("The character %c is at position:%d\n",c,ptr-string+1);elseprintf("The character was not found\n");printf("\n\n filename is %s \n\n",find_file_name(filepath));return 0;
}

例子2:

//windows下路径测试
#include "stdio.h"
#include "string.h"
int main(void){char fn[30],*p;char pathname[80]="e:\\1\\2\\abc.dat";//上句假设以某种方式获得的全文件名在pathname中,"..."中只是举例strcpy(fn,(p=strrchr(pathname,'\\')) ? p+1 : pathname);//上句函数第2实参这样写以防止文件在当前目录下时因p=NULL而出错printf("%s\n",fn);//打出来看看return 0;
}

参考:http://c.biancheng.net/cpp/u/string_h/

转载于:https://www.cnblogs.com/alan666/p/8311891.html

linux c下,从路径名中分离文件名相关推荐

  1. 如何从完整的文件路径中分离文件名和路径名?

    从路径中分离文件名: CString GetFileName(CString pathname)  {  for( int i=pathname.GetLength()-1; i>=0; i-- ...

  2. linux xampp开始伪静态,Linux XAMPP下启用WordPress的自定义文件名(伪静态)功能

    Linux XAMPP下启用WordPress的自定义文件名(伪静态)功能 在安装好WORDPRESS后,想启用伪静态的功能,一个是为了好看,另外也是为了更好的SEO,按照大家的配置方式,只需要将如下 ...

  3. linux中网页播放音乐,Linux_在Linux系统下播放网页中的背景音乐技巧,在Linux中的firefox浏览许多网页 - phpStudy...

    在Linux系统下播放网页中的背景音乐技巧 在Linux中的firefox浏览许多网页时,很多使用了基于WMP的背景音乐播放器,如部份baidu空间.但firefox默认不支持播放. 在LINUX的源 ...

  4. linux 字符界面 office,Linux系统下对比永中office和wps的界面及字体,附对比图

    本文为你介绍Linux系统下对比永中office和wps的界面及字体,附对比图和用户评论.仅是对这两个应用软件直观的界面进行比较,没有没有涉及到功能齐不齐全.兼容性是否良好等问题.如果你使用的是Dee ...

  5. linux mkfs 源码,Linux系统下移植busybox中mkfs.vfat命令

    为了延长磁盘寿命来存储音视频文件,打发在格式化磁盘过程中将簇的大小设置大点.因为存储的音视频文件现对较大,那么将簇大小设置得尽可能大,这样可以增强磁盘读取数据的性能,同时也不会浪费太多空间. 但发现我 ...

  6. linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息

    如果你的硬盘曾经组过raid,而现在只剩下一个硬盘了,在装linux的时候,会找不到硬盘(提示类似raid信息错误),这时,你需要先清空硬盘中残留的raid信息才能继续安装.方法如下: 先用linux ...

  7. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

  8. Linux环境下Nginx不支持中文文件名解决办法

    当一个文件名称为中文时,或者下载一个的文件名称为中文时,会出现404. 解决办法:增加charset utf-8; nginx配置: server {listen 80;server_name www ...

  9. linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)

    [小蜗牛闲情之作 ] 我想给一个朋友传一个大视频,有几百M,尝试多种传输办法失败后,最后想到的是把视频切开一片片"邮递"过去给他,让它自己组装起来吧. [root@pps publ ...

最新文章

  1. 【优秀奖】Java开发那点事征文
  2. ASP.NET 4.0 的新特性(2 在WebForm中使用Routing)(翻译)
  3. bat查看java进程 过滤_通过查找.BAT中使用的端口来终止进程
  4. java和jvm_java 和 JVM
  5. jedis jedispool Redistemplate
  6. MySQL官方备份_Mysqlbackup 备份详解(mysql官方备份工具)
  7. 这份操作系统词典请查收!
  8. Ext3和Ext4文件系统
  9. Socket开发框架之框架设计及分析
  10. 打通 C++ 和 C# 关于 COM 组件互相调用的任督二脉
  11. 清华大学操作系统OS学习(四)——物理内存管理:连续内存分配
  12. Excel 内的 VBS 脚本编程锦策
  13. Promise中then的执行顺序详解
  14. cgb2106-day12
  15. 论机器学习中数据的重要性
  16. 解决表格边框不显示的问题
  17. 可视化大屏项目-大屏界面测试点梳理
  18. 白门柳-刘斯奋有声小说
  19. Group BOM 和BOM group
  20. Python--文件的读写

热门文章

  1. Codeforces 758C. Unfair Poll
  2. wcf寄宿iis7是的 500错误
  3. Jquery调用webService的四种方法 【转载】
  4. asp.net中DropDownList的SelectedIndexChanged触发问题
  5. leetcode算法题--旋转数组的最小数字
  6. OVS ofproto(二十三)
  7. DPDK 大页内存原理(二十一)
  8. linux内核网络协议栈--数据包的网卡转发流程(二十七)
  9. secFox setting
  10. ecma 2018, javascript spread syntax behaves like Object.assign