_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
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
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
则将空字符串分配给相应的缓冲区。
对于不需要的参数,path
可以将 传递给 。NULL
_splitpath
如果 path
为 NULL
,则调用无效参数处理程序,如 参数验证中所述。 如果允许继续执行,则将 errno
设置为 EINVAL
并且该函数返回 EINVAL
中所述。
要求
例程所返回的值 | 必需的标头 |
---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅兼容性。
示例
请参阅 _makepath
的示例。
另请参阅
文件处理
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp
_splitpath_s
, _wsplitpath_s