_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

如果 pathNULL,则调用无效参数处理程序,如 参数验证中所述。 如果允许继续执行,则将 errno 设置为 EINVAL 并且该函数返回 EINVAL中所述。

要求

例程所返回的值 必需的标头
_splitpath <stdlib.h>
_wsplitpath <stdlib.h><wchar.h>

有关兼容性的详细信息,请参阅兼容性

示例

请参阅 _makepath 的示例。

另请参阅

文件处理
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp
_splitpath_s, _wsplitpath_s