_splitpath、_wsplitpath
将路径名称分解成组件。 提供这些函数的更多安全版本;请参见 _splitpath_s、_wsplitpath_s。
void _splitpath(
const char *path,
char *drive,
char *dir,
char *fname,
char *ext
);
void _wsplitpath(
const wchar_t *path,
wchar_t *drive,
wchar_t *dir,
wchar_t *fname,
wchar_t *ext
);
参数
path
完整路径。drive
驱动器号,后面加上冒号 (:)。 如果不需要使用驱动器号,可以传递此参数的 NULL。dir
目录路径,包括尾部斜杠。 正斜杠 (/),反斜杠( \ ),或两者皆可。 如果不需要目录路径,可以传递此参数的 NULL。fname
基文件名 (不扩展)。 如果不需要使用文件名,可以传递此参数的 NULL。ext
文件名扩展,包括前导句点 (.)。 如果不需要使用文件名扩展,可以传递此参数的 NULL。
备注
_splitpath 函数将路径分解成四个部分。 _splitpath它们自动处理合适的多字节字符串参数,根据当前使用的多字节代码页识别多字节字符序列. _wsplitpath 是 _splitpath 的宽字符版本;_wsplitpath 的参数是宽字符串。 否则这些函数具有相同行为。
安全性说明" 这些函数可能会导致由缓冲区溢出问题引起的潜在威胁。 缓冲区溢出问题是常见的系统攻击方法,使权限的提升不能确保。 有关更多信息,请参见避免缓冲区溢出。 这些函数更安全版本可用;参见 _splitpath_s,_wsplitpath_s。
一般文本例程映射
TCHAR.H 例程 |
未定义的_UNICODE & _MBCS |
已定义 _MBCS |
已定义 _UNICODE |
---|---|---|---|
_tsplitpath |
_splitpath |
_splitpath |
_wsplitpath |
完整路径的每个组件存储在单独的缓冲区中;清单常数 _MAX_DRIVE、_MAX_DIR、_MAX_FNAME和 _MAX_EXT(定义在 STDLIB.H) 指定每个文件组件的最大大小。 大于对应的清单常数的文件组件造成堆损坏。
每个缓冲区的大小必须与其对应的清单常数一样,以避免潜在的缓冲区溢出。
下表列出了清单常数的值。
名称 |
值 |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
如果没有完整路径不包含组件 (例如,文件名), _splitpath 将空字符串分配给对应的缓冲区。
您可以将 NULL 传递给该参数的所有 _splitpath,除不需要的 path 外。
如果 path 是 NULL,则会调用无效参数处理程序,如 参数验证 中所述。 如果允许执行继续,errno设置为EINVAL,并且函数返回EINVAL。
要求
例程 |
必需的标头 |
---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> 或 <wchar.h> |
有关其他兼容性信息,请参见“简介”中的兼容性。
示例
请参见 _makepath的示例 。
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例。