函数原型:

函数原型:
errno_t _splitpath_s(
   const char * path,
   char * drive,
   size_t driveNumberOfElements,
   char * dir,
   size_t dirNumberOfElements,
   char * fname,
   size_t nameNumberOfElements,
   char * ext,
   size_t extNumberOfElements
);
errno_t _wsplitpath_s(
   const wchar_t * path,
   wchar_t * drive,
   size_t driveNumberOfElements,
   wchar_t *dir,
   size_t dirNumberOfElements,
   wchar_t * fname,
   size_t nameNumberOfElements,
   wchar_t * ext,
   size_t extNumberOfElements
);

参数:

[in] path

全路径

[out] drive

驱动器号,后跟一个冒号(:),如果你不需要驱动器号,可以传递NULL

[in] driveNumberOfElements

Drive的缓冲区大小(单字节或款字节),如果drive为NULL,该参数必须为0

[out] dir

目录路径,包括尾部的斜杠,可以使用“\”,“/”或者都使用,如果不需要目录路径,可以传递NULL

[in] dirNumberOfElements

Dir的缓冲区大小(单字节或者款字节),如果dir为NULL,该参数必须为0

[out] fname

不带扩展名的文件名,如果不需要文件名,可以传递NULL

[in] nameNumberOfElements

Fname的缓冲区大小(单字节或者宽字节),如果fname为NULL,该参数必须为0

[out] ext

文件的扩展名,包括“.”,如果不需要扩展名,可以传递NULL

[in] extNumberOfElements

Ext的缓冲区大小(单字节或者宽字节),如果ext为NULL,该参数必须为0

返回值:

成功返回0,失败返回错误代码 EINVAL

错误的情况有:

Condition

Return Value

path is NULL

EINVAL

drive is NULL, driveNumberOfElements is non-zero

EINVAL

drive is non-NULL, driveNumberOfElements is zero

EINVAL

dir is NULL, dirNumberOfElements is non-zero

EINVAL

dir is non-NULL, dirNumberOfElements is zero

EINVAL

fname is NULL, nameNumberOfElements is non-zero

EINVAL

fname is non-NULL, nameNumberOfElements is zero

EINVAL

ext is NULL, extNumberOfElements is non-zero

EINVAL

ext is non-NULL, extNumberOfElements is zero

EINVAL

任何一个指针指向空,那么对应的缓冲区必须为0,否者调用失败,返回EINVAL。

如果任何一个缓冲区太短而无法包含结果,那么该函数会清空所有缓冲区指向空。设置errno 为ERANGE,并返回ERANGE。

注意:

_splitpath_s 该函数将全路径分割成四个部分,分别是驱动器,路径名,文件名(不带扩展名),扩展名。_splitpath_s会根据当前正在使用的多字节页码来识别多字节字符来处理宽字节字符串。_wsplitpath_s是_splitpath_s的多字节版本,_wsplitpath_s的参数是宽字符。

全路径被分成四个部分分别存储在不同的缓冲区中,每个部分允许的最大值为_MAX_DRIVE, _MAX_DIR,_MAX_FNAME, and_MAX_EXT,这些宏定义在stdlib.h中,如果这四个部分的缓冲区大小超过了定义的允许的最大值,那么会引起heap corruption.

以下是四个宏的定义的最大值:

Name

Value

_MAX_DRIVE

3

_MAX_DIR

256

_MAX_FNAME

256

_Max_EXT

256

如果全路径中缺少一个部分(例如没有文件名)_splitpath_s会为对应的缓冲区赋值为空。

头文件:

Routine

Required haerd

_splitpath_s

<stdlib.h>

_wsplitpath_s

<stdlib.h> or <wchar.h>

// tchar.h 中的宏定义

#define _tsplitpath     _splitpath

#define _tsplitpath_s   _splitpath_s

代码例子:

void MXSPLITPATH_S(const TCHAR* szFullPath, TCHAR* szDrive, TCHAR* szDir, TCHAR* szFileName, TCHAR* szExt)
{
#if (_MSC_VER > 1310) // VS2005_splitpath_s(szFullPath, szDrive, szDrive ? _MAX_DRIVE : 0,szDir, szDir ? _MAX_DIR : 0, szFileName,szFileName ? _MAX_FNAME : 0, szExt, szExt ? _MAX_EXT : 0);
#else_splitpath(szFullPath, szDrive, szDir, szFileName, szExt);
#endif
}

_tsplitpath_s(分解路径)相关推荐

  1. _splitpath,_makepath分析路径

    生成路径,分解路径 FROM MSDN: Example /* MAKEPATH.C */#include <stdlib.h> #include <stdio.h>void ...

  2. Python os.path路径模块中的操作方法总结

    解析路径路径解析依赖与os中定义的一些变量: os.sep-路径各部分之间的分隔符. os.extsep-文件名与文件扩展名之间的分隔符. os.pardir-路径中表示目录树上一级的部分. os.c ...

  3. 信号处理-小波包分解

    文章目录 小波分解与小波包分解 小波包-小波包树与时频图 小波包分解系数 信号的能量 python 实例 小波包的使用 参考 小波分解与小波包分解 工程应用中经常需要对一些非平稳信号进行,小波分析和小 ...

  4. Python中常用的一些操作总结(未完待续)update @ 2017-5-18

    写在前面的话 其实也没有什么可以写的,或者说完全没有价值.因为你只要动一动手指就可以在Google上找到我要写的这些东西.只是我还不习惯好久没有碰我的blog,但是我又不想写没有价值的东西.或许有价值 ...

  5. 计算图上的微积分:Backpropagation 微积分 SOTON数据分析 · 2015-09-06 08:52 [译] 计算图上的微积分:Backpropagation 引言 Backprop

     计算图上的微积分:Backpropagation 微积分 SOTON数据分析 · 2015-09-06 08:52 引言 Backpropagation (BP) 是使得训练深度模型在计算上可行的关 ...

  6. Learning Collaborative Agents with Rule Guidance for Knowledge Graph Reasoning-学习笔记

    目录 问题和初步 问题表述 基于符号的方法 基于步行的方法 提出的方法:RuleGuider 模型架构 Relation Agent Entity Agent Policy Network Model ...

  7. 【C++grammar】文件系统以及path类使用

    目录 1.文件系统概述 1.关于路径 2.如何将某个路径下的所有文件递归地找出来? 2.路径类及操作 1.path类的成员函数 2.path类的非成员函数 示例1:展示C++17中的path对象的用法 ...

  8. Java概览(java语言编程艺术笔记)

    Java入门(1)--注释,面向对象,问题分解 注释 简单程序里广泛注释显然是愚蠢的,但是设计更大的,更复杂的程序是一种非常有用的记录. 面向对象 扩展类的实例同时也是现有类的实例. 这个怎么理解?虽 ...

  9. 微商城支付开发(二)

    微信支付功能(代码开发) 上一篇文章已经告诉大家如何配置来获取微信提供的参数.在这里再问问自己是否拿到以下参数: 1.开发者ID(AppID) 2.商户ID 3.支付key(需要加密的MD5) PS( ...

最新文章

  1. 如何在团队中做好Code Review
  2. 干货 | MTCNN实时人脸检测网络详解与代码演示
  3. 「GAN」如何生动有趣地对GAN进行可视化?Google的GAN Lab请了解
  4. 【转】vfork 和 fork的区别
  5. linux shell 脚本 获取当前函数名
  6. 实现vue2.0响应式的基本思路
  7. 【Java】eclipse如何设置成保护眼的背景色
  8. c语言代码先来先服务算法_C语言十大经典排序算法(动态演示+代码,值得收藏)...
  9. python判断数组中是否有重复元素_python经典面试算法题4.1:如何找出数组中唯一的重复元素...
  10. python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
  11. ORCU浅析之安装和作用
  12. 使用FFmpeg视频缩略图实现
  13. 网站搭建教程(怎么建网站详细步骤)
  14. adsl网站服务器能行不,ADSL用户个人网站服务器创建办法.docx
  15. php排版word文档试卷,用word做试卷的排版
  16. PCB中邮票孔的用处以及常用设置
  17. WordSequence API
  18. 猛男插件!csdn浏览器助手到底怎样!(整合全网评价)
  19. selenium+Java同时开启多个浏览器并行测试用例
  20. 2022.3.3总结+力扣258. 各位相加

热门文章

  1. HAL库配置STM32F1系列定时器驱动步进电机(三)
  2. 从前世看今生,从JavaEE到微服务
  3. 通过路由器访问光猫(openwrt)
  4. OMNIPAY(欧米派、欧米链)-全球领先的多链数字钱包
  5. 个股短、中线技术形态判定
  6. web服务器利用线程响应http请求,多线程实现的HTTP应用服务器(HTTPWebServer)Mutu 0.2 alpha连载I...
  7. 知物由学 | 听声辨人,看声纹识别技术如何保障内容安全?
  8. 如何把pdf翻译成中文?
  9. 淘特(淘宝特价版)关键词搜索
  10. 一维测量助手(尺寸检测、精确定位)