_tsplitpath_s(分解路径)

函数原型:

函数原型:
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
}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值