%>
将路径分解为组件。 有关这些函数的更安全版本;请参阅 _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
。
要求
例程 | 必需的标头 |
---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
请参阅 _makepath
的示例。