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

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);
else
printf("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/

linux c下,从路径名中分离文件名的更多相关文章

  1. Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 (需暂停服务的方式)

    Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 本机采用Ubuntu16.04系统,tar方式安装MySQL5.7.21 数据库安装文件夹为    /home/devil/mysql 现 ...

  2. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...

  3. linux系统如何将系统中的文件名改为英文?

    由于我们经常在命令行模式下进入文件,那么中英文的切换常常会影响我们输入的效率. 那么如何将原来的中文修改成英文的字幕呢? 如下图所示: -------------------------------- ...

  4. 全陷阱破解:在Linux环境下的Jenkins中持续集成Androidproject

    本方案以 RHEL / Centos 64位Linux操作系统为例,由于这是眼下最常见的server环境. 一.安装Java SDK. 建议,不要使用诸如yum之类的玩意自己主动安装,由于openJD ...

  5. linux系统下shell命令中的sleep

    在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)sleep 1    睡眠1秒sleep 1s    睡眠1秒sleep 1m   睡眠1分sleep 1h   睡眠1 ...

  6. linux环境下,清空history中记录的历史命令

    需求描述: 今天在数据库主机上操作,通过history看到有刚操作过的历史记录,想把这个清除了, 但是,还不影响后续的命令记录,所以查了下,在此记录. 操作过程: 1.通过history -c命令,完 ...

  7. linux 环境下bash脚本中找不到命令

    mr.sh: line 1: HADOOP_CMD: command not found mr.sh: line 4: INPUT_FILE_PATH: command not found mr.sh ...

  8. Linux系统下Apache2.4.17的安装过程

    Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...

  9. linux环境下redis安装(redis伪集群搭建)

    redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...

随机推荐

  1. # 2018-2019-2 20165210《网络攻防技术》Exp1 PC平台逆向破解(BOF实验)

    2018-2019-2 20165210<网络攻防技术>Exp1 PC平台逆向破解(BOF实验) 实验分为三个部分: 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. ...

  2. 目标跟踪算法meanshift优缺点

    原博主:http://blog.csdn.net/carson2005/article/details/7341051 meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过 ...

  3. python3精简笔记(三)——高级特性

    Python中 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片(Slice)操作符 L ...

  4. ElasticSearchRepository和ElasticSearchTemplate的使用

    Spring-data-elasticsearch是Spring提供的操作ElasticSearch的数据层,封装了大量的基础操作,通过它可以很方便的操作ElasticSearch的数据. 版本说明 ...

  5. 每周荐书:云原生、Docker、Web算法(评论送书)

    每周荐书:云原生.Docker.Web算法(评论送书) 感谢大家对每周荐书栏目的支持,先公布下上周中奖名单 名优秀评论可以免费获得此书.   云原生应用架构实践 云原生架构,关注简化开发流程.提升研发 ...

  6. 记录一下前端ajax实现增删改功能的步骤

    主要依赖三个按钮:新增,删除,编辑 新增:点击时创建新的LI或者TR并append到父级里,此时无需调动后台接口(如果新增需要弹窗输入val则可以调用): 删除:判断this是否有后台传过来的id值, ...

  7. Anaconda使用、conda的环境管理和包管理

    关于Anaconda的安装参考本人之前的博文 http://www.cnblogs.com/bymo/p/8034661.html 关于Anaconda的概述和详细使用参考:https://www.j ...

  8. jquery.treetable.js

    html:   <table class="table table-hover table-responsive main-list" id="columntabl ...

  9. scala学习笔记(9): 语法续

    1 不定长参数 def sum(args: Int*) = { var result = 0 for ( arg <- args) result += arg result } 2 数组初始化 ...

  10. java中守护线程的一些概念和用法

    网上的资料中,守护线程的功能一般都是“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线 ...