_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

要求

例程 必需的标头
_splitpath <stdlib.h>
_wsplitpath <stdlib.h><wchar.h>

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

示例

请参阅 _makepath 的示例。

另请参阅

文件处理
_fullpath_wfullpath
_getmbcp
_makepath_wmakepath
_setmbcp
_splitpath_s_wsplitpath_s