_splitpath_s, _wsplitpath_s

Разбивает имя пути на компоненты. Эти функции — это версии с улучшениями безопасности,_wsplitpathкак описано в функциях безопасности в CRT._splitpath

Синтаксис

errno_t _splitpath_s(
   const char * path,
   char * drive,
   size_t driveNumberOfElements,
   char * dir,
   size_t dirNumberOfElements,
   char * fname,
   size_t nameNumberOfElements,
   char * ext,
   size_t extNumberOfElements
);
errno_t _wsplitpath_s(
   const wchar_t * path,
   wchar_t * drive,
   size_t driveNumberOfElements,
   wchar_t *dir,
   size_t dirNumberOfElements,
   wchar_t * fname,
   size_t nameNumberOfElements,
   wchar_t * ext,
   size_t extNumberOfElements
);
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
   const char *path,
   char (&drive)[drivesize],
   char (&dir)[dirsize],
   char (&fname)[fnamesize],
   char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
   const wchar_t *path,
   wchar_t (&drive)[drivesize],
   wchar_t (&dir)[dirsize],
   wchar_t (&fname)[fnamesize],
   wchar_t (&ext)[extsize]
); // C++ only

Параметры

path
Полный путь.

drive
Буква диска с двоеточием в конце (:). Этот параметр можно передать NULL , если буква диска не нужна.

driveNumberOfElements
Размер буфера drive в однобайтовых или расширенных символах. Если параметр drive имеет значение NULL, это значение должно быть 0.

dir
Путь к каталогу, включая заключительную косую черту. Могут использоваться символы косой черты (/), обратной косой черты (\\) или оба. Этот параметр можно передать NULL , если путь к каталогу не нужен.

dirNumberOfElements
Размер буфера dir в однобайтовых или расширенных символах. Если параметр dir имеет значение NULL, это значение должно быть 0.

fname
Базовое имя файла (без расширения). Этот параметр можно передать NULL , если имя файла не требуется.

nameNumberOfElements
Размер буфера fname в однобайтовых или расширенных символах. Если параметр fname имеет значение NULL, это значение должно быть 0.

ext
Расширение имени файла, включая начальную точку (.). Этот параметр можно передать NULL , если не требуется расширение имени файла.

extNumberOfElements
Размер буфера ext в однобайтовых или расширенных символах. Если параметр ext имеет значение NULL, это значение должно быть 0.

Возвращаемое значение

Возвращает нуль в случае успеха или код ошибки в случае неудачи.

Условия ошибок

Condition Возвращаемое значение
path имеет значение NULL. EINVAL
drive имеет значение NULL, driveNumberOfElements отличен от нуля EINVAL
drive отличен от NULL, driveNumberOfElements равен нулю EINVAL
dir имеет значение NULL, dirNumberOfElements отличен от нуля EINVAL
dir отличен от NULL, dirNumberOfElements равен нулю EINVAL
fname имеет значение NULL, nameNumberOfElements отличен от нуля EINVAL
fname отличен от NULL, nameNumberOfElements равен нулю EINVAL
ext имеет значение NULL, extNumberOfElements отличен от нуля EINVAL
ext отличен от NULL, extNumberOfElements равен нулю EINVAL

При возникновении любого из указанных выше условий вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, эти функции устанавливают параметр errno в значение EINVAL и возвращают значение EINVAL.

Если какой-либо из этих буферов слишком мал для хранения результата, эти функции очищают все буферы, присваивают им пустые строки, устанавливают для параметра errno значение ERANGE и возвращают ERANGE.

Замечания

Функция _splitpath_s разделяет путь на четыре компонента. Функция_splitpath_s автоматически требуемым образом обрабатывает аргументы в виде многобайтовых строк, распознавая многобайтовые последовательности символов в соответствии с текущей многобайтовой кодовой страницей. _wsplitpath_s — это двухбайтовая версия _splitpath_s; аргументы для _wsplitpath_s представляют собой двухбайтовые строки. В остальном эти функции ведут себя одинаково.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

Каждый компонент полного пути хранится в отдельном буфере; Константы манифеста _MAX_DRIVE, _MAX_FNAME_MAX_DIRи _MAX_EXT (определенные вSTDLIB.H) указывают максимальный допустимый размер каждого компонента файла. Компоненты файла, размер которых превышает значения соответствующих констант манифеста, могут вызвать повреждение кучи.

В приведенной ниже таблице перечислены значения констант манифеста.

Имя (название) Значение
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

Если полный путь не содержит компонент (например, имя файла), _splitpath_s назначает пустую строку соответствующему буферу.

В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".

Версии библиотек отладки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold.

Требования

Маршрут Обязательный заголовок
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

См. пример для _makepath_s. _wmakepath_s

См. также

Обработка файлов
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp