用C语言如何从路径名中分离文件名

上网查了一下,自己也写了一个小测试程序,但是都没法分离文件名,所以在这里请教一下大家,下面是我自己写的代码:void*GetFilename(char*p){intx=s... 上网查了一下,自己也写了一个小测试程序,但是都没法分离文件名,所以在这里请教一下大家,下面是我自己写的代码:
void *GetFilename(char *p)
{
int x = strlen(p);
char ch = '\\';
char *q = strrchr(p,ch);

return q;
}

int main(int argc, char* argv[])
{

char p[]="D:\SoftWare\Adobe\Photoshop5.exe";

printf("%s\n",GetFilename(p));
return 0;
}
输出结果:
展开
 我来答
White_MouseYBZ
推荐于2016-09-08 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6593万
展开全部

声明一个足够长的名为fn的char型数组,调用库函数strrchr在含路径的全文件名中找到文件名前的'\',将其后的文件名拷贝到fn中即可。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#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;
}
dreambox007
推荐于2018-02-27 · TA获得超过416个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:259万
展开全部
void *GetFilename(char *p)
{
int x = strlen(p);
char ch = '\\';
char *q = strrchr(p,ch) + 1;

return q;
}

int main()
{
char p[]="D:\\SoftWare\\Adobe\\Photoshop5.exe";

printf("%s\n",GetFilename(p));
return 0;
}

 char p[]="D:\\SoftWare\\Adobe\\Photoshop5.exe";

中的双斜杠是赋值时用到的,如果路径名是其它方式获取到,就不需要用到双斜杠!

追问
直接用strrchr函数获取 '\' 字符指针就行了?
追答
是的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tterk
2020-03-25
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
本来我是不想思考来百度查的,结果查出来的都不能用(-_-)....
然后就自己写了一个->
//将一个带文件名的路径分解为路径和文件名
void decomposition(const char* str,char* pname,char* fname)
{
int i;
int psize=0;//用以记录最后一个分隔符的位置(路径结束位置)
int fsize=0;//文件当前指向
/* 寻找到最后一个分隔符 */
while(str[fsize]) {
if(str[fsize]<=0x7f) { //字符
if(str[fsize]=='/'||str[fsize]=='\')
psize=fsize;
fsize++;
}else fsize+=2; //中文
}
/* 开始拷贝 */
for(i=0;i<psize;i++) pname[i]=str[i];pname[i]='\0';
for(i=psize+1,fsize=0;str[i];i++) fname[fsize++]=str[i];fname[fsize]='\0';
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冒泡君
2014-04-11 · 知道合伙人软件行家
冒泡君
知道合伙人软件行家
采纳数:10 获赞数:23
五年软件开发经验,精通C/C++

向TA提问 私信TA
展开全部
你的这句话char p[]="D:\SoftWare\Adobe\Photoshop5.exe"; 里的\被编译器解析成转义字符了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuzongxian0010
2014-04-11 · TA获得超过796个赞
知道小有建树答主
回答量:433
采纳率:100%
帮助的人:333万
展开全部
char p[]="D:\SoftWare\Adobe\Photoshop5.exe";
要改成:
char p[]="D:\\SoftWare\\Adobe\\Photoshop5.exe";
更多追问追答
追问
更改路径肯定可以。但是路径是通过函数获取的,而且要处理的路径比较多,手动更改是不可能的
追答
用什么函数获取的路径?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式