Share via


_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。有关更多信息,请参见平台调用示例

请参见

参考

文件处理

_fullpath、_wfullpath

_getmbcp

_makepath、_wmakepath

_setmbcp

_splitpath_s、_wsplitpath_s