函数原型:
函数原型:
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(分解路径)
最新推荐文章于 2020-09-01 15:57:06 发布