_splitpath_s, _wsplitpath_s
将路径名元素。这些是 _splitpath, _wsplitpath 的版本与安全增强的 CRT中的安全功能如中所述。
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
);
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
const char *path,
char (&drive)[drivesize],
char (&dir)[dirsize],
char (&fname)[fnamesize],
char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
const wchar_t *path,
wchar_t (&drive)[drivesize],
wchar_t (&dir)[dirsize],
wchar_t (&fname)[fnamesize],
wchar_t (&ext)[extsize]
); // C++ only
参数
[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。
返回值
零,如果成功;在失败的错误代码。
错误状态
Condition |
返回值 |
---|---|
path 是NULL |
EINVAL |
drive 是 NULL, driveNumberOfElements 是非零 |
EINVAL |
drive 非NULL, driveNumberOfElements 为零 |
EINVAL |
dir 是 NULL, dirNumberOfElements 是非零 |
EINVAL |
dir 非NULL, dirNumberOfElements 为零 |
EINVAL |
fname 是 NULL, nameNumberOfElements 是非零 |
EINVAL |
fname 非NULL, nameNumberOfElements 为零 |
EINVAL |
ext 是 NULL, extNumberOfElements 是非零 |
EINVAL |
ext 非NULL, extNumberOfElements 为零 |
EINVAL |
如果任何一个以上条件,则无效参数调用处理程序,如 参数验证 所述。如果执行允许继续,对 EINVAL 的这些功能集 errno 和返回 EINVAL。
如果任何缓冲区太短而无法包含该结果,这些功能清除所有缓冲区空字符串,设置 errno 到 ERANGE,并返回 ERANGE。
备注
_splitpath_s功能将路径其四个元素。自动**_splitpath_s处理多字节字符串参数根据需要,识别多字节字符顺序基于当前正在使用多字节代码的页。_wsplitpath_s**是 _splitpath_s的宽字符版本;为 _wsplitpath_s的参数是宽字符字符串。这些函数或方法的行为
一般文本例程映射
TCHAR.H 实例 |
未定义的 _UNICODE _MBCS |
定义的 _MBCS |
定义的 _UNICODE |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
完整路径的每个元素在单独的缓冲区存储;清单常数 _MAX_DRIVE、 _MAX_DIR、 _MAX_FNAME和 _MAX_EXT(定义在 STDLIB.H) 为每个文件元素指定最大允许大小。文件大于元素对应的清单常数导致堆损坏。
下表列出了清单常数的值。
名称 |
值 |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
如果没有完整路径未包含一个元素 (例如,文件名), _splitpath_s 分配一个空字符串到对应的缓冲区。
在 C++ 中,使用这些功能由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。有关更多信息,请参见 安全模板重载。
这些函数的 " debug " 版本用 0xFD 首先加载缓冲区。若要禁用此行为,请使用 _CrtSetDebugFillThreshold。
要求
实例 |
必需的头 |
---|---|
_splitpath_s |
stdlib.h |
_wsplitpath_s |
stdlib.h 或 wchar.h |
有关其他的兼容性信息,请参见中介绍的 兼容性 。
示例
为 _makepath_s, _wmakepath_s参见示例。
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。